下面是两个淘汰模板插件和插件2。两者都依赖于ko.computed observables,并且两个observable都将其deferEvaluation属性设置为true。插件不渲染,但插件2 渲染。
需要更改什么来制作插件渲染(保持deferEvaluation == true)?
在此处http://jsfiddle.net/jeljeljel/YKLGM/
HTML
<div id="plugin" data-bind="template: { name: 'template1', data: $data }" ></div>
<div id="plugin2" data-bind="template: { name: 'template2', data: $data }" ></div>
<script type="text/html" id="template1">
<div data-bind="foreach: columns()">
<span data-bind="text: displayText"></span>
</div>
</script>
<script type="text/html" id="template2">
<div data-bind="text: dataItem" ></div>
</script>
的Javascript
var gridData = {
columns: [{
displayText: 'Name'
}, {
displayText: 'Last Login Date'
}, {
displayText: 'Email'
}]
};
function DataModel() {
var self = this;
self.columns = ko.observableArray([]);
self.loadGrid = ko.computed({
read: function () {
self.columns(gridData.columns);
},
owner: this,
deferEvaluation: true
});
self.id = ko.observable(1);
self.dataItem = ko.computed({
read: function () {
return self.id() * 3;
},
owner: this,
deferEvaluation: true
});
}
dataModel = new DataModel();
ko.applyBindings(dataModel);
答案 0 :(得分:1)
两者都依赖于ko.computed observables
不,他们不是。 plugin
仅取决于columns
,这是一个永远不会被填充的空observableArray。也许你应该在某处使用你的loadGrid
计算的observable。
顺便说一句,loadGrid
在当前状态下计算的observable没有多大意义,read方法甚至不返回任何内容。