如果敲除声明和可见绑定不起作用

时间:2013-10-18 02:46:31

标签: javascript jquery knockout.js

我正在尝试显示div,具体取决于div的用户数。如果div包含的用户数超过x,则在用户上方显示div,否则则不显示。我通过foreach循环显示用户。

查看:

<div class="collapse in" data-bind="template: { name: 'list', foreach: $data.Users }">

</div>

<script type="text/html" id="list">
<!-- ko if: ShowLetter -->
        <div id="letter" data-bind=" text: Letter"></div>
<!-- /ko -->
</script>

我也在我看来试过这个:

<div id="letter" data-bind="visible:ShowLetter, text: Letter"></div>

但是当我渲染页面时,我得不到任何字母,或者字母会显示给一组小于x的用户。我的结果显示三组第一组只有1个用户而且不应该显示字母 - 第二组有2个用户不应该显示字母而第3组有30个用户并且应该显示字母。

使用Javascript:

 var userViewModel = function (data) {
        var _self = this;
        _self.Name = ko.observable(data.Name);
        _self.Letter = ko.observable(data.Letter);
        _self.ShowLetter = ko.computed(function () {
            return (roleViewModel.UserCount > properties.RoleUser);
        });
    };

var typeViewModel = function (data) {
        var _self = this;
        _self.ContentType = ko.observable(data.ContentType);
        _self.Name = ko.observable(data.Name);
        _self.Rank = ko.observable(data.Rank);
        _self.UserCount = ko.observable(data.UserCount);
        _self.Users = ko.observableArray([]);
    };

如何让我的观点在foreach中循环的每个组中正常运行?

2 个答案:

答案 0 :(得分:0)

由于属性ShowLetter是一个计算的observable,你必须调用它,否则你只是传递原型......

例如。 会是

或data-bind =“visible:ShowLetter,text:Letter” 将是data-bind =“visible:ShowLetter(),text:Letter”

应该照顾它。

答案 1 :(得分:0)

在你的计算中,你想调用roleViewModel.UserCount()(不确定RoleUser),因为它是一个可观察的。否则一切都看起来很好,虽然缺少一些代码。