【发布时间】:2015-02-03 14:52:40
【问题描述】:
如何将使用敲除的 javascript 代码移到 html 文件之外?我想创建一个单独的文件来处理所有内容(或尽可能多地)。模板也应该仍然有效。提前致谢!
编辑:所做的更改。我在我的 Scripts 文件夹中添加了 require.js 并创建了 app.js 和 viewmodel.js 文件。但这仍然行不通。任何帮助将不胜感激:)
EDIT2:几乎就在那里,Rumesh Eranga 使用 require.js 给出了正确答案。我的装订只剩下一点问题。 'data-bind="text: $(item.name)"' 不会显示名称,只会显示 '[object Object]'。
EDIT3:已解决!
这是 HTML 文件:
<head>
<script type="text/javascript" data-main="Script/app.js" src="Scripts/require.js"></script>
</head>
<body>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="Scripts/jquery.tmpl.js"></script>
<script id="shoppingItemTemplate" type="text/html">
<li><span data-bind="text: item.name"></span></li>
</script>
<div id="ActiveShoppingList">
<h2>Shopping items</h2>
<div id="ActiveList">
<ul data-bind="template: {name:'shoppingItemTemplate', foreach: items, as:'item'}"></ul>
<button data-bind="click:addItem">Add item</button>
</div>
</div>
</body>
这是我的脚本/app.js:
require(['knockout-3.2.0', 'viewmodel'], function(ko, viewmodel) {
ko.applyBindings(new viewmodel);
});
这是我的脚本/viewmodel.js:
define(['knockout-3.2.0'], function(ko) {
return function viewmodel (){
this.items = ko.observableArray([new item("item1"), new item("item2")]);
this.addItem = function()
{
this.items.push(new item("new item"));
};
};
function item(name)
{
return { name: ko.observable(name) };
}
});
【问题讨论】:
-
难道你不能通过 ajax 加载外部 HTML 部分,然后在加载该 HTML 文件时,只在那时 applyBindings 吗?
标签: javascript html knockout.js templating