Jos*_* M. 5 data-binding knockout.js
看看下面的示例HTML.它是一个简单的KO foreach绑定和一个添加新项目的按钮observableArray.添加工作正常,新项目出现.但是,afterRender永远不会调用该方法 - 不是在初始绑定之后,也不是在添加(和渲染)新项之后.为什么?
小提琴: http ://jsfiddle.net/CQNm6
HTML
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript" src="http://knockoutjs.com/downloads/knockout-2.2.1.js"></script>
</head>
<body>
<div data-bind="foreach: data.things, afterRender: afterRenderTest">
<h1 data-bind="text: name"></h1>
</div>
<a href="JavaScript:void(0);" onclick="data.things.push({ name: ko.observable('New Thing') });">Add New Thing</a>
<script type="text/javascript">
var Thing = (function ()
{
function Thing(p_name)
{
this.name = ko.observable(p_name);
}
return Thing;
})();
var data =
{
things: ko.observableArray(
[
new Thing("Thing One"),
new Thing("Thing Two"),
new Thing("Thing Three")
])
};
function afterRenderTest(elements)
{
alert("Rendered " + elements.length + " elements.");
}
ko.applyBindings();
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
nem*_*esv 12
您的语法错误,因为foreach 绑定要么采用数组,要么指定其他事件,参数.
从文件中:
传递您希望迭代的数组.绑定将为每个条目输出一部分标记.
或者,传递一个JavaScript对象文字,
data其中包含一个名为您希望迭代的数组的属性 .对象文字也可能有其他属性,例如afterAdd或includeDestroyed......
所以你需要写:
<div data-bind="foreach: { data: data.things, afterRender: afterRenderTest }">
<h1 data-bind="text: name"></h1>
</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2658 次 |
| 最近记录: |