我遇到了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