我試圖創建一些選項卡,每個用戶選擇一個配置文件保存一個選項卡。每個配置文件是一個ViewModel。所以我想我只是創建另一個ViewModel,其中包含一個類型爲{name:profile_name,model:model_converted_to_json}的對象的observableArray。使用Knockout.js創建Bootstrap選項卡foreach
我跟着this example來創建我的代碼 - 但我沒有得到任何約束,出於某種原因。
這裏是我的代碼:
-ViewModel(我用Requirejs,這解釋了外部包裝):
"use strict";
// profiles viewmodel class
define(["knockout"], function(ko) {
return function() {
var self = this;
this.profilesArray = ko.observableArray();
this.selected = ko.observable();
this.addProfile = function(profile) {
var found = -1;
for(var i = 0; i < self.profilesArray().length; i++) {
if(self.profilesArray()[i].name == profile.name) {
self.profilesArray()[i].model = profile.model;
found = i;
}
}
if(found == -1) {
self.profilesArray().push(profile);
}
};
};
});
-The JS代碼(大文件的摘錄):
var profiles = new profilesViewMode();
ko.applyBindings(profiles, $("#profileTabs")[0]);
$("#keepProfile").on("click", function() {
var profile = {
name: $("#firstName").text(),
model: ko.toJSON(model)
};
profiles.addProfile(profile);
profiles.selected(profile);
console.log(profile);
$("#profileTabs").show();
});
- HTML(感謝Sara糾正我的HTML標記)
<section id="profileTabs">
<div>
<ul class="nav nav-tabs" data-bind="foreach: profilesArray">
<li data-bind="css: { active: $root.selected() === $data }">
<a href="#" data-bind="{ text: name, click: $root.selected }"></a>
</li>
</ul>
</div>
</section>
我已驗證observableArray在按鈕單擊時確實獲得了新的正確值 - 它只是不會呈現。我希望這是我在Knockout數據綁定語法中缺少的一件小事。
謝謝你的時間!
這可能會幫助您的HTML問題http://meta.stackexchange.com/questions/110126/how-can-i-paste-html-markup-into-a-stack-overflow-question-field – jes
這就是我嘗試過(並且只是重新嘗試過 - 多次) - 仍然,HTML代碼不顯示 –
您的已排序列表正在干擾代碼格式。 – Sara