【发布时间】:2016-06-25 12:49:33
【问题描述】:
我正在使用 knockout.js 组件和 require.js。 到目前为止,这运行良好,但我正在努力解决以下问题。
假设我在一个非常简单的 html 页面中有一个组件实例:
<div id="exams">
<databound-exam-control></databound-exam-control>
</div>
来自包含的视图模型:
require(['knockout', 'viewModel', 'domReady!'], function (ko, viewModel) {
ko.components.register('databound-exam-control', {
viewModel: { require: 'databound-exam-control-viewmodel' },
template: { require: 'text!databound-exam-control-view.html' }
});
ko.applyBindings(new viewModel());
});
我想获取子视图模型内容,以便稍后在单击按钮时保存页面的所有数据。
现在我只是尝试在 pre 标记中显示父/子视图模型:
<div>
<pre data-bind="text: childViewModel()"></pre>
</div>
借助包含的视图模型:
function childViewModel() {
var model = ko.dataFor($('databound-exam-control').get(0).firstChild);
return ko.toJSON(model, null, 2);
};
在调用 ko.dataFor 时出现以下错误,可能是因为页面没有完全呈现:
除非您指定“写入”选项,否则无法将值写入 ko.computed。如果您想读取当前值,请不要传递任何参数。
是这样吗?还是我完全错过了这里的重点?
任何帮助表示赞赏。
【问题讨论】:
-
我会说最好设置您的主视图模型以在您创建它们时跟踪这些子模型。作为一个人为的示例,您可以查看:jsfiddle.net/timh06/91n3m25t 也可以查看
ko.contextFor,而不是ko.dataFor,它应该可以访问元素的绑定上下文。
标签: javascript knockout.js requirejs web-component