【问题标题】:Knockout JS passing parameter to functionKnockout JS 将参数传递给函数
【发布时间】:2014-08-16 00:19:15
【问题描述】:

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

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

但在这种情况下,在 Js 端,在我的函数中,我只接收主要对象:我无法接收我的 ROW 数据,也无法接收“参数”值! 这是我在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;
}

你能帮帮我吗?

【问题讨论】:

    标签: javascript jquery knockout.js durandal


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可以使用函数表达式:

      <!-- 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/

      【讨论】:

      • 谢谢你的回答,在“click”绑定中使用没问题,但是在可见绑定中,我在“param1”参数中收到等于$data,在“data”参数中收到UNDEFINED。
      猜你喜欢
      • 2021-08-28
      • 2014-09-15
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 2013-01-27
      • 1970-01-01
      相关资源
      最近更新 更多