1

我有一个初始化函数应用 Knockout 绑定并使用 jQuery 委托绑定其他一些事件。

init = function (){

    ko.applyBindings(_data);

    $('#tabs').tabs();

    $('#container').delegate(".expand_all", "click", (function () {...})
}

视图模型有一个 observable 和一个在 ajax 调用后改变 observable 的函数:

function(data){

    var self = this;
    var name = ko.observable(data.name);

    self.changeName = function(){
        getName(function(data){
            ......
            self.name(data.name);
            ......
            ......
        }
    }
}

HTML 标记

<div id="container">
    <a href='#' data-bind='click: changeName'></a>
    <div id="tabs">
          <ul>
                 <li>......</li>
                 <li>......</li>
          </ul>
    </div>
    <a href='#' class="expand_all"></a>
</div>

奇怪的是,在 changeName 被触发后,#tabs 和 #div 上的事件绑定都丢失了。

有人请阐明一下吗?

4

2 回答 2

2

knockout.js observables 应该是公开的,而不是私有的:

self.name = ko.observable(data.name);

如前所述,回调中没有self.name()可用的函数,因为该变量被错误地声明为私有。self.changeName()name

您很可能会在浏览器的控制台中发现异常。

于 2012-10-08T08:30:59.140 回答
1

自定义绑定会解决您的问题吗?

ko.bindingHandlers.myBindingName = {
    init: function(element, valueAccessor, 
                   allBindingsAccessor, viewModel, bindingContext) {

        var $elem = $(element);
        // Apply event handler on $elem

    },
    update: function(element, valueAccessor, 
                     allBindingsAccessor, viewModel, bindingContext) {

        // Handle value updated here

    }
};

在您的标记中:

<a href='#' data-bind='myBindingName: changeName'></a>
于 2012-10-08T08:20:29.037 回答