Я за спутать ...ПОЧЕМУ он инициализирует этот компонент 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/Knockout:
//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