在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
功能。我会亲自处理。我只想让“编辑”只显示给有权编辑评论的用户。
答案 0 :(得分:1)
您正在使用的函数没有返回任何内容,这意味着它们将始终返回undefined
(这是假的)。要么返回相等性检查的结果,要么只是不将它包装在函数中(Knockout将处理它并使用返回值)。
<span data-bind="if: postedById === $parent.loginUserId">
<span data-bind="click: editComment"> edit </span>
</span>