当前位置:  开发笔记 > 编程语言 > 正文

使用knockoutjs + twitter bootstrap跟踪标签

如何解决《使用knockoutjs+twitterbootstrap跟踪标签》经验,为你挑选了1个好方法。

我正在尝试跟踪视图模型中的选定选项卡,但我似乎无法使其工作.

在单击选项卡时,在以下代码中,标题将正确更新,但不显示选项卡的内容.如果删除,, click: $parent.selectSection则显示内容但标题不会更新.

现在,如果你data-bind="css: { active: selected }"从那里删除li它似乎工作时单击选项卡,但按钮选择第二个选项卡不.

我怎样才能做到这一点?

请参阅:http://jsfiddle.net/5PgE2/3/

HTML:

Selected:

JS:

var Section = function (name) {
    this.name = name;
    this.selected = ko.observable(false);
}

var ViewModel = function () {
    var self = this;
    self.sections = ko.observableArray([new Section('One'),
    new Section('Two'),
    new Section('Three')]);
    self.selectedSection = ko.observable(new Section(''));
    self.selectSection = function (s) {
        self.selectedSection().selected(false);

        self.selectedSection(s);
        self.selectedSection().selected(true);
    }

    self.selectTwo = function() { self.selectSection(self.sections()[1]); }
}

ko.applyBindings(new ViewModel());

RP Niemeyer.. 30

有几种方法可以使用bootstrap的JS或只是让Knockout添加/删除active类来处理这个问题.

要使用Knockout执行此操作,这里有一个解决方案,其中Section本身具有计算以确定它当前是否被选中.

var Section = function (name, selected) {
    this.name = name;
    this.isSelected = ko.computed(function() {
       return this === selected();  
    }, this);
}

var ViewModel = function () {
    var self = this;

    self.selectedSection = ko.observable();

    self.sections = ko.observableArray([
        new Section('One', self.selectedSection),
        new Section('Two', self.selectedSection),
        new Section('Three', self.selectedSection)
    ]);

    //inialize to the first section
    self.selectedSection(self.sections()[0]);
}

ko.applyBindings(new ViewModel());

标记看起来像:


此处示例:http://jsfiddle.net/rniemeyer/cGMTV/

您可以使用许多变体,但我认为这是一种简单的方法.

这是一个调整,其中活动选项卡使用节名称作为模板:http://jsfiddle.net/rniemeyer/wbtvM/



1> RP Niemeyer..:

有几种方法可以使用bootstrap的JS或只是让Knockout添加/删除active类来处理这个问题.

要使用Knockout执行此操作,这里有一个解决方案,其中Section本身具有计算以确定它当前是否被选中.

var Section = function (name, selected) {
    this.name = name;
    this.isSelected = ko.computed(function() {
       return this === selected();  
    }, this);
}

var ViewModel = function () {
    var self = this;

    self.selectedSection = ko.observable();

    self.sections = ko.observableArray([
        new Section('One', self.selectedSection),
        new Section('Two', self.selectedSection),
        new Section('Three', self.selectedSection)
    ]);

    //inialize to the first section
    self.selectedSection(self.sections()[0]);
}

ko.applyBindings(new ViewModel());

标记看起来像:


此处示例:http://jsfiddle.net/rniemeyer/cGMTV/

您可以使用许多变体,但我认为这是一种简单的方法.

这是一个调整,其中活动选项卡使用节名称作为模板:http://jsfiddle.net/rniemeyer/wbtvM/

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有