gpt4 book ai didi

javascript - 使用 Knockout.js foreach 创建 Bootstrap 选项卡

转载 作者:行者123 更新时间:2023-12-04 00:52:21 25 4
gpt4 key购买 nike

我正在尝试创建一些选项卡,用户选择保存的每个配置文件一个。每个配置文件都是一个 ViewModel。所以我想我只是创建另一个 ViewModel,它包含一个 observableArray 类型的对象:{name: profile_name, model: model_converted_to_json}。

我关注了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);
}
};
};
});

-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 数据绑定(bind)语法中遗漏的一件小事。

感谢您的宝贵时间!

最佳答案

您需要直接在 observableArray 上调用 push,这将推送到底层数组并通知所有订阅者。所以:

self.profilesArray.push(profile);

关于javascript - 使用 Knockout.js foreach 创建 Bootstrap 选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13276295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com