Knockout js从元素内容初始化可观察值

时间:2012-11-14 20:01:39

标签: javascript knockout.js

我有这样的事情

<td data-bind="text: email_sended">
  <%= invite.email_send %>
</td>

function AdminInvitesViewModel() {
   var self = this;
   self.email_send = ko.observable();
}

ko.applyBindings(new AdminInvitesViewModel());

如何从容器内容初始化observable?

在这种情况下,电子邮件发送是真/假值。

1 个答案:

答案 0 :(得分:4)

如果有必要,那么您可以使用自定义绑定轻松完成此操作。

这是一个绑定,它将使用元素的innerText设置现有的observable,或者如果它不存在则创建一个observable。

ko.bindingHandlers.textWithInit = {
    init: function(element, valueAccessor, allBindingsAccessor, data) {
        var property = valueAccessor(),
            content = element.innerText || element.textContent;

        //create the observable, if it doesn't exist 
        if (!ko.isWriteableObservable(data[property])) {
            data[property] = ko.observable();
        }

        data[property](content);

        ko.applyBindingsToNode(element, { text: data[property] });
    }
};

您可以使用它:

<div data-bind="textWithInit: 'email_sended'"></div>

请注意,属性名称是引号,因为绑定支持不存在的observable

示例:http://jsfiddle.net/rniemeyer/kKBBj/