我遇到了knockout.js组件和require.js。 到目前为止,这工作得很好,但我正在努力处理以下问题。从其包含viewmodel访问组件viewmodel
比方说,我有我的组件的一个实例在一个非常简单的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());
});
我想获得孩子视图模型内容后当我点击一个按钮时保存页面的所有数据。
现在我只是想显示显示在预标签的父/子的ViewModels:
<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。如果您想读取当前值,请不要传递任何参数。
是不是这样?或者我在这里完整地忽略了这一点?
任何帮助表示赞赏。
我想说,设置你的主视图模型来跟踪你创建的子模型可能会更好。作为一个人为的例子,你可以看看:https://jsfiddle.net/timh06/91n3m25t/ 也可以不用'ko.dataFor'来查看'ko.contextFor',它应该可以访问绑定元素的上下文。 – Timh