2017-07-07 147 views
1

嗨如何才能让我有knockoutjs值单击事件我的按钮代码Knockoutjs按钮单击

<button data-bind="click : LikeButtonClick , value : MessageId" class="btn btn-default like"><span data-bind="text:LikeCount"></span> <i class="fa fa-thumbs-o-up"></i></button> 

和我knockoutjs单击代码

var LikeButtonClick = function() { 
    alert(""); 
} 

我怎么能刷新我喜欢后像按钮点击事件。我使用模板绑定。我的模板绑定代码是

var viewModel = { 
      messages: ko.observableArray() 
     }; 
     ko.options.useOnlyNativeEvents = true; 
     ko.applyBindings(viewModel); 
     $.getJSON('@Url.Action("statusMessages", "Home")', function (data) { 
      viewModel.messages(data); 
     }); 

和我一样按钮的代码

var LikeButtonClick = function (id) { 
      $.ajax({ 
       url: '/Home/Like/' + id, 
       type: 'POST', 
       success: function (data) { 
         // refresh 
         }); 
       } 
      }); 
     } 

回答

1

this上下文传递给方法将是你的视图模型,或任何你已经绑定的元素。在LikeButtonClick内部,您应该能够通过参考属性this.MessageId()获得值MessageId

如果要将值传递给click处理程序,则需要声明数据绑定的内联函数,或者将函数与上下文绑定。这里的上下文是主视图模型:

data-bind="click: LikeButtonClick.bind($root,'green')" 

var LikeButtonClick = function (src) { 
     alert(src); // src='green' in this example 
    } 
+0

如何获得警报消息 '绿色'? –

+0

@FurkanBozdağ更新了示例。我建议阅读http://knockoutjs.com/documentation/event-binding.html类似的例子 – BurnsBA

+0

thanskıts工作良好的数据绑定=“点击:LikeButtonClick.bind($ root,MessageId)”/// –

2

另一种方法是在您的数据模型中构建点击函数。在这里我直接将该功能添加到该项目。每次点击只会影响它自己的对象信息。

function Post() { 
 
    var self = this; 
 
    self.Text = ko.observable("Lorem Ipsum"); 
 
    self.Liked = ko.observable(false); 
 
    self.LikeCount = ko.computed(function() { 
 
    return self.Liked() ? 1 : 0; 
 
    }); 
 
    self.MessageId = ko.observable(1); 
 

 

 
    self.LikeButtonClick = function() { 
 
    self.Liked(!self.Liked()); 
 
    } 
 

 
} 
 

 
function viewModel() { 
 
    var self = this; 
 

 
    self.Posts = ko.observableArray(); 
 

 
    self.Load = function() { 
 
    self.Posts.push(new Post()); 
 
    self.Posts.push(new Post()); 
 
    self.Posts.push(new Post()); 
 
    } 
 
    self.Load(); 
 
} 
 

 
ko.applyBindings(new viewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
 

 
<div data-bind="foreach: Posts"> 
 

 
    <div data-bind="text:Text"></div> 
 
    <button data-bind="click: LikeButtonClick, value: MessageId" class="btn btn-default like"> 
 
<span data-bind="text:LikeCount"></span> 
 
<i class="fa fa-thumbs-o-up"></i></button> 
 
</div>

+0

如何在我喜欢按钮点击后刷新我的绑定tempalte –

+0

我的模板代码var viewModel = { messages:ko.observableArray() }; ko.options.useOnlyNativeEvents = true; ko.applyBindings(viewModel); $ .getJSON('@ Url.Action(“statusMessages”,“Home”)',function(data){ viewModel.messages(data); }); –

+0

和我喜欢的功能变种LikeButtonClick =功能(ID){$ 阿贾克斯({ 网址: '/主页/顶/' + ID, 类型: 'POST', 成功:功能(数据){ 警报( “Beğendi”); } }); } –