2

现在我正在使用 KnockoutJs,我想开发 Chrome 打包应用程序。我想知道如何绑定数据 MVVM。因为在http://developer.chrome.com上说不能在 html 中使用内联 javascript。JS 必须是分隔文件。

那么我如何编写这个 MVVM 作品以供点击呢?甚至更多的淘汰赛?

<span data-bind="text : $data.name, click : $root.load> </span>
<span data-bind="text:shoppingCart().somethingChange()"></span>
4

4 回答 4

5

快速版

除非您将页面沙箱化并删除某些功能,否则您无法真正使用它。


长版

Chrome 打包应用程序要求使用的代码和任何库都符合 CSP 标准。换句话说,不可能使用eval(), new Function(), 任何<script></script>HTML 标记和其他一些东西。

Knockout 将其中一些用于绑定和模板。因此,您不能将 Knockout has is 用于 Chrome 打包应用程序。

此外,我发现一些信息指出 Knockout 的开发人员的目标不是使其符合 CSP。你可以在他们的Git repo上找到它。

Chrome 扩展也有一些非常相似的问题。我在这个主题上读到的内容涉及对 iframe 进行沙箱处理......经过更多挖掘,沙箱处理将导致页面无法使用某些功能。

唯一的替代方法是为 Knockout 使用自定义绑定提供程序。然而,我发现此时使用另一个 MV* 库更有吸引力。

于 2013-09-11T03:17:45.797 回答
1

AFAIK 这个

除非您将页面沙箱化并删除某些功能,否则您无法真正使用它。

不再持有。

只要你添加:

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",

到 manifest.json 的根级别。

我只是尝试了一个简单的方法: <h1 data-bind="text: version().length"></h1>

default_popup页面中并没有发现任何问题,至少对于 Chrome 而言:48.0.2564.116(64 位)版本

于 2016-03-07T19:05:40.807 回答
0

看起来您正在尝试绑定文本,而不是动作(例如“点击”),因此最简单的方法是将计算的 observable添加到模型中,计算您在其函数中需要的值,并将其绑定到跨度.

于 2013-08-14T17:59:58.407 回答
-2

Knockout 的数据绑定不使用 html 中的内联 javascript,HTML data-bind 属性仅定义一个字符串表达式,其中可能包含类似 javascript 的表达式,knockout 将从其外部脚本文件中解析和执行。淘汰 MVVM 的数据绑定不应该遇到任何问题

于 2013-08-16T09:01:00.417 回答