如何自动触发点击数据绑定淘汰赛

时间:2015-08-18 18:00:54

标签: knockout.js

post中,我有一个数据成员loginUserId,其中包含当前登录用户的ID。我想在评论和评论回复功能中使用此ID来验证用户是否可以编辑评论。为此我尝试了两个技巧,但没有一个工作。

<script>
    function post(data) {
        var self = this;
        self.loginUserId = data.loginUserId;
        self.comments = ko.observableArray();
        //other stuff
        if (data.comment) {
            var cmt = $.map(data.comment, function (item) { return new comment(item); });
            self.Comments(cmt);
        }
    }
    function comment(data) {
        var self = this;
        self.postedById = data.postedById;
        //some stuff
        self.isEditable = function (userId,loginUserId) {
            if (userId == loginUserId) {
                return true;
            }
            return false;
        }
    }
    function viewModel() {
        var self = this;
        self.posts = ko.observableArray();
        self.loadpost = function () {
            //load using ajax and map in post 
        }
        self.loadpost();
        return self;
    }

    $(function () {
        ko.applyBindings(new viewModel());
    })
</script>


<span data-bind="foreach:posts">
    <span data-bind="text:loginUserId"></span>
    <span data-bind="foreach:comments">
        <span data-bind="text:postedById"></span>
        <span data-bind="text:description"></span>
        <span data-bind="visible: function(){ isEditable($parent.loginUserId,$data.postedById)}">edit</span>
        @* second trick. Not sure even "if" executes the function
        <span data-bind="if:function(){$data.postedById == $parent.loginUserId}">
            <span data-bind="click:editComment"> edit </span>
        </span>*@
        </span>
</span>

现在isEditable不会自动触发。如何触发isEditable功能。

更新 请不要考虑editComment功能。我会亲自处理。我只想让“编辑”只显示给有权编辑评论的用户。

1 个答案:

答案 0 :(得分:1)

您正在使用的函数没有返回任何内容,这意味着它们将始终返回undefined(这是假的)。要么返回相等性检查的结果,要么只是不将它包装在函数中(Knockout将处理它并使用返回值)。

<span data-bind="if: postedById === $parent.loginUserId">
    <span data-bind="click: editComment"> edit </span>
</span>