【问题标题】:knockoutjs pass parameters in nested foreach bindingknockoutjs 在嵌套的 foreach 绑定中传递参数
【发布时间】:2013-08-22 21:00:49
【问题描述】:

我正在尝试将嵌套 foreach 循环中外部对象的属性传递给函数。 这将是下面代码中的'something',但我什至无法使用硬编码字符串:

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

       <div  data-bind="text: $data"></div>

       <div class="span3 social_connect text-right">

       <div data-bind="with: $root.Selected">
           <div data-bind="foreach: networks">          
                 <div id='connected' data-bind="text: $root.checkNetwork.bind($data,'something')">
                </div>

           </div>
       </div>
</div>

这会在'connected' div 中显示function () { [native code] }

我的最终目标是显示网络列表,并针对其中一个,检查当前用户是否已连接,通过与他的网络列表进行比较并显示适当的消息。

我的模型是这样的:

function viewModel() {

        var self = this;         

        self.supportedNetworks = ['facebook', 'twitter', 'google'];   

        self.checkNetwork = function (name) {
            console.log(name); 
            // Display connected or Not connected          
        };                      

        ....
  };

所选对象是具有以下类型网络的用户对象:

function SocialNetwork(item) {
    var self=this;

    self.Id = ko.observable(item.Id),
    self.Name = ko.observable(item.Name)   
};

我离得很近吗?顺便说一句,如果重要的话,我使用的是 2.3.0 版

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    调用.bind 创建一个新函数,该函数使用特定的上下文和参数执行。所以,.bind 的结果是一个函数,你可以在它后面加上() 来执行。

    但是,在这种情况下(使用 text 绑定),您似乎想要函数调用的输出,因此您可以将其简化为:

    data-bind="text: $root.checkNetwork('something')"
    

    【讨论】:

    • 我错过了这个。所以我想要的完整表达式是 data-bind="text: $root.checkNetwork($data.Name(),$parents[1])">
    猜你喜欢
    • 2012-05-22
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多