Mar*_*son 1 javascript knockout.js
我有这个非常简单的knockoutjs脚本.我的视图模型包含一个名为'modules'的属性,它是一个字符串数组.如果我有这样的foreach列表,它会打印每个项目的模块列表:
<tbody data-bind="foreach: items">
<tr>
<td data-bind="text: modules"></td>
</tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)
但是如果我想通过添加计算的observable来打印模块的数量:
<tbody data-bind="foreach: items">
<tr>
<td data-bind="text: numModules"></td>
</tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)
我遇到了问题.'undefined'不是它在我计算函数的第一行所说的函数.我的js代码看起来像这样:
function AppViewModel(data) {
var self = this;
ko.mapping.fromJS(data, {}, this);
this.numModules = ko.computed(function() {
return self.modules().length;
});
};
$.getJSON("/api/items", function(data) {
var viewModel = new AppViewModel(data);
ko.applyBindings(viewModel);
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,计算机可能在属性实际存在之前尝试计算.默认情况下,ko.computed中未设置的一个参数是deferEvaluation参数...一旦设置了此参数,计算机将不会尝试计算AppViewModel的初始化.
this.numModules = ko.computed({
read: function() {
return self.modules().length;
},
deferEvaluation: true
);
Run Code Online (Sandbox Code Playgroud)
更挑剔的是,如果你定义'self = this',那么在下一行中用'this'的上下文设置你的计算,为什么你定义'self'?
| 归档时间: |
|
| 查看次数: |
3145 次 |
| 最近记录: |