简体   繁体   English

我该如何使用Knockoutjs切换html元素的可见性?

[英]how do i toggle the visibility of an html element using knockoutjs ?

i am using knockoutjs v3.1.0. 我正在使用淘汰表v3.1.0。 i am trying to build a master-detail like view. 我正在尝试建立类似主视图的视图。 the problem i am having is that elements are not showing (though they are hiding). 我遇到的问题是元素没有显示(尽管它们隐藏了)。 my mock code is at http://jsfiddle.net/jwayne2978/qC4RF/3/ 我的模拟代码位于http://jsfiddle.net/jwayne2978/qC4RF/3/

this is my html code. 这是我的html代码。

<div data-bind="foreach: users">
<div>Row</div>
<div data-bind="text: username"></div>
<div data-bind="visible: showDetails">
    <div data-bind="text: address"></div>
</div>
<div> 
    <a href="#" 
        data-bind="click: $root.toggleDetails">
            Toggle Div
    </a>
</div>

this is my javascript code 这是我的JavaScript代码

var usersData = [
{ username: "test1", address: "123 Main Street" }, 
 { username: "test2", address: "234 South Street" }
];

var UsersModel = function (users) {
    var self = this;
    self.users = ko.observableArray(
        ko.utils.arrayMap(users, function (user) {
            return {
                username: user.username,
                address: user.address,
                showDetails: false
            };
        }));
    self.toggleDetails = function (user) {
        user.showDetails = !user.showDetails;
        console.log(user);
    };
};

ko.applyBindings(new UsersModel(usersData));

what's supposed to happen is that when a user clicks on the link, the corresponding HTML div should show. 应该发生的是,当用户单击链接时,应该显示相应的HTML div。 the console clearly shows that the property is being changed on the user object, but the HTML element's visibility is not changing. 控制台将清楚显示该属性已在用户对象上更改,但HTML元素的可见性未更改。 i also explicitly made the showDetails property observable, but that did not help. 我还明确地使showDetails属性可观察,但这没有帮助。

showDetails : ko.observable(false)

any help is appreciated. 任何帮助表示赞赏。

var UsersModel = function (users) {
var self = this;
//var flag=ko.observable(true);
self.users = ko.observableArray(
    ko.utils.arrayMap(users, function (user) {
        return {
            username: user.username,
            address: user.address,
            showDetails: ko.observable(false)  //it should be observable
        };
    }));
self.toggleDetails = function (user) {
    user.showDetails(!user.showDetails());
    console.log(user);
 };
};

Fiddle Demo 小提琴演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM