Knockout JS将参数传递给函数

时间:2014-06-25 12:24:52

标签: javascript jquery knockout.js durandal

我正在研究Durandal项目,我需要知道从HTML端调用函数传递参数的最佳方法。 在以前的版本中,我总是这样使用:

<div data-bind="foreach: rows">
 <div data-bind="visible: $root.myFunction.bind($data,'parameter')">
  ...
  ...
 </div>
</div>

但是在这种情况下,在Js方面,在我的功能中,我只收到主要对象:我无法接收我的ROW数据而且我无法接收参数&#39;值! 这是我在js方面的模型:

define(['services/datacontext', 'durandal/app', 'config'], 
 function (datacontext, app, config) {
   var model = function () {
      var self = this;
      ...
      ...
      ...
   }

   model.prototype.myFunction(parameter) {
      var show = false;
      ...
      ...
      return show;
   }

   return model;
}
你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

您可以在$data中访问this myFunction - .bind的第一个参数设置上下文(context = this引用的对象到)。

   model.prototype.myFunction(parameter) {
      var show = false;
      // `this` is the $data you specified in your view
      return show;
   }

答案 1 :(得分:0)

您可以使用函数表达式:

<!-- function expression -->
<div data-bind="click: function (data) { myFunction('param1', data) }">...</div>

这样你就可以避免只传递一个参数。 示例:

<p>Test</p>
<div data-bind="foreach: test">
    <button data-bind="click: function (data) { myFunction('param1', data) }">Test</button>
</div>

ko.applyBindings({
    test: [{
        myFunction: function (param1, data) {
            alert(param1 + " " + data.data);
            debugger;
        },
        data: "test1"
    }, {
        myFunction: function (param1, data) {
            alert(param1 + " " + data.data);
        },
        data: "test2"
    }]
});

Fiddler: http://jsfiddle.net/9AZjN/