2012-11-14 27 views
1

可觀察到的值我有這樣淘汰賽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()); 

一些事情,我怎麼能初始化觀察到從容器的內容?

我這種情況下,電子郵件發送是一個真/假值。

回答

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> 

注意,屬性名是在引號中,如綁定支持觀察到的不存在尚未

樣品:http://jsfiddle.net/rniemeyer/kKBBj/