【问题标题】:Bind method name using knockout foreach binding使用淘汰赛 foreach 绑定绑定方法名称
【发布时间】:2014-12-08 19:18:39
【问题描述】:

我正在尝试使用淘汰赛 foreach 将方法名称与列表元素绑定。方法应该在mousedown 上调用,但方法名称是字符串,我不知道如何使用它。

JsFiddle Link

Javascript

  var model = {};
        var data1 = [{ Name: "hi", Method: "a" }, { Name: "hello", Method: "b" }, { Name: "bye", Method: "c" }];

        model.data = ko.observableArray(data1);

        function a() {
            alert('i am a');
        }

        function b() {
            alert('i am b');
        }


        function c() {
            alert('i am c');
        }

        ko.applyBindings(model);

HTML

  <ul data-bind="foreach: data">
    <li>
        <label data-bind="text: Name, event: { mousedown: Method }"></label>
    </li>
</ul>

【问题讨论】:

  • 你想达到什么目的?为什么需要为不同的项目调用不同的函数?

标签: javascript html jquery knockout.js


【解决方案1】:

您只需要在Viewmodel 定义中定义您的函数,如图所示 Here

即您需要将其用作::

  var model = {};
            var data1 = [{ Name: "hi", Method: 
            function a() {
                alert('i am a');
            } }];

            model.data = ko.observableArray(data1);



            ko.applyBindings(model);

http://jsfiddle.net/egbh0x3z/2/

只需查看我在上面发送的 JSFiddle 链接即可。

【讨论】:

  • 但我需要将函数作为字符串插入。 var data1 = [{ Name: "hi", Method: "function a() { alert('i am a'); }" }];
  • 你想通过函数实现的东西就实现了。你还想要什么?
  • 实际上我的模态是 json 格式,所以函数是字符串格式。
【解决方案2】:

你可以这样实现

var model = {};
var data1 = [
        { Name: "hi", Method: "a" }, 
        { Name: "hello", Method: "b" }, 
        { Name: "bye", Method: "c" }
];

model.data = ko.observableArray(data1);
model.Method = function(str){
    if(str == 'a'){
        a()
    }else if(str == 'b'){
        b()
    }else{
        c()
    }
}
ko.applyBindings(model);


function a() {
    alert('i am a');
}

function b() {
    alert('i am b');
}


function c() {
    alert('i am c');
}

然后查看

<ul data-bind="foreach: data">
    <li>
        <label data-bind="text: Name, event: { mousedown: $root.Method.bind($data,Method) }"></label>
    </li>
</ul>  

Demo

【讨论】:

    【解决方案3】:

    你传递这样的方法:

    <label data-bind="text: Name, event: { mousedown: Method }"></label>
    

    你的模型应该是这样的:

    var data1 = [{ Name: "hi", Method: a }, { Name: "hello", Method: b }, { Name: "bye", Method: c }];
    

    http://jsfiddle.net/egbh0x3z/4/

    【讨论】:

      【解决方案4】:

      这里是必需的FIDDLE

      您只需要在编写函数名称时删除双引号。

      var model = {};
              var data1 = [{ Name: "hi", Method: a }, { Name: "hello", Method: b }, { Name: "bye", Method: c }];
      
              model.data = ko.observableArray(data1);
      
              function a() {
                  alert('i am a');
              }
      
              function b() {
                  alert('i am b');
              }
      
      
              function c() {
                  alert('i am c');
              }
      
              ko.applyBindings(model);
      

      【讨论】:

        猜你喜欢
        • 2013-03-14
        • 2014-05-29
        • 1970-01-01
        • 2014-01-10
        • 2013-02-04
        • 2015-03-17
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        相关资源
        最近更新 更多