這裏是我的簡化模型:knockoutjs可見性刷新已更新
var GoalItem = function(id, type, name, authorId, author, children) {
this.id = ko.observable(id);
this.type = ko.observable(type);
this.name = ko.observable(name);
this.authorId = ko.observable(authorId);
this.author = ko.observable(author);
this.children = ko.observableArray(children || []);
this.isPage = ko.computed(function(){ return type == 'page' ? true : false; }, this);
this.isFile = ko.computed(function(){ return type == 'file' ? true : false; }, this);
};
var GoalModel = function() {
this.list = ko.observableArray([
new GoalItem(1, 'page', 'Getting started', 0, '', [
new GoalItem(2, 'page', 'Getting started 1.1', 0, ''),
new GoalItem(3, 'video', 'Video', 0, '', [
new GoalItem(4, 'data', 'Data', 0, ''),
new GoalItem(5, 'test', 'Test', 0, '', [
new GoalItem(6, 'page', 'Test prep', 0, '', [
new GoalItem(7, 'video', 'Test video', 0, ''),
new GoalItem(8, 'file', 'Test file', 0, '')
])
]),
new GoalItem(9, 'page', 'Sample page', 0, '')
])
]),
new GoalItem(10, 'page', 'More data tracking', 0, '', [
new GoalItem(11, 'data', 'Data 1', 0, ''),
new GoalItem(12, 'data', 'Data 2', 0, '')
])
]);
}
和一些標記使用可見性來確定哪些HTML片段顯示
<div data-bind="visible: currentItem().isPage">
applicable to pages only
</div>
與
<div data-bind="visible: currentItem().isFile">
applicable to files only
</div>
我有一些代碼,當用戶點擊一個GoalItem被渲染成樹視圖wil l負載和隱形將負責顯示/隱藏
如果用戶現在在UI中爲當前GoalItem的「type」屬性進行更改,如果不重新觸發isvisible - 因此如果類型從「頁」到「文件」
目前它似乎沒有工作,希望這個解釋是有道理的,如果不是,我會嘗試添加更多的細節。
另一方面,從閱讀的角度來看,我是否需要「移除」或「替換」可觀察數組中的項目,以便重新觸發isvisible:binding「? - 如果是的話 - 或者作爲一個相關的問題 - 什麼是最好的方式來找到一個項目在observableArray基於這個.id - baring記住,該項目可以是「深」內的兒童?
任何反饋或幫助,非常感謝
duh!就像一個魅力:)感謝您的快速響應,偉大的框架! – Andre 2012-03-04 20:22:26