4
我超越迷茫......爲什麼它會以隨機順序初始化這個Knockout.js組件?
我使用Knockout.js組件,模板和自定義元素創建列表。出於某種原因,我在我的Viewmodel
中創建的步驟正在自定義元素定義中以隨機順序進行初始化!並且它是完全隨機的,所以它是不同的每個時間!
爲了更好地說明這一點,最好看看JSFiddle。在每個步驟初始化之後,我放置了alert("break")
。 加載一次,然後再次點擊「運行」以正確查看演示。看看輸出窗口,你可以看到,除了第一步被寫入以外,步驟總是出現隨機(儘管它們最終保持它們的順序)。
https://jsfiddle.net/uu4hzc41/8/
我需要以正確的順序有這些,因爲我會從我的模型添加某些屬性到一個數組。當它們是隨機的時,我無法正確訪問數組元素。
HTML:
<ul>
<sidebar-step params="vm: sidebarStepModel0"></sidebar-step>
<sidebar-step params="vm: sidebarStepModel1"></sidebar-step>
<sidebar-step params="vm: sidebarStepModel2"></sidebar-step>
<sidebar-step params="vm: sidebarStepModel3"></sidebar-step>
<sidebar-step params="vm: sidebarStepModel4"></sidebar-step>
</ul>
JS /基因敲除:
//custom element <sidebar-step>
ko.components.register("sidebar-step", {
viewModel: function (params) {
this.vm = params.vm;
alert("break");
},
template: "<li data-bind='text: vm.message'>vm.onChangeElement</li>"
});
// model
var SidebarStepModel = function() {
this.message = ko.observable("step description");
};
// viewmodel
var OrderGuideViewModel = function() {
this.sidebarStepModel0 = new SidebarStepModel();
this.sidebarStepModel0.message("step 1");
this.sidebarStepModel1 = new SidebarStepModel();
this.sidebarStepModel1.message("step 2");
this.sidebarStepModel2 = new SidebarStepModel();
this.sidebarStepModel2.message("step 3");
this.sidebarStepModel3 = new SidebarStepModel();
this.sidebarStepModel3.message("step 4");
this.sidebarStepModel4 = new SidebarStepModel();
this.sidebarStepModel4.message("step 5");
};
ko.applyBindings(new OrderGuideViewModel());
哇,這麼簡單的答案,我認爲是一個複雜的問題!異步操作甚至沒有跨過我的腦海!這裏是更新的小提琴任何關心的人 - 你現在可以看到正確的順序加載步驟! - https://jsfiddle.net/uu4hzc41/9/ – AlbatrossCafe