2013-01-14 42 views
2

我有可觀察到的結合一個textarea一個隱藏的div像這樣內:可觀察到的不更新時在一個隱藏的div

<span title="sales comment" data-bind="attr: { id: 'sales-'+year() }" style="cursor :pointer;"> 
<img src="information.png" alt="Add comment" />             
</span> 
<div data-bind="attr: { id: 'sales-'+year()+'_content' }" style="display : none;"> 
<textarea data-bind="value: salesComment, valueUpdate: 'keydown'"> </textarea> 
</div> 

和視圖模型

var FinancialYearViewModel = function(data, parent) { 
    var self = this; 
    self.year = ko.observable(); 
    self.salesComment = ko.observable(); 
}; 

ko.applyBindings(new FinancialHistoryViewModel(data)); 

var data = {"year": "2012", "salesComment": "sales comment"} 

隱藏的div被用於填充這樣一個qtip工具提示的內容:

$(document).ready(function() 
{ 
$("span[title]").each(function(i) {   
    content = $("#" + this.id + "_content").html(); 
    $(this).qtip({ content: { 
      text: content 
     },      
      show: { 
       event: 'click' 
      }, 
      hide: { event : 'unfocus'}       
    });      
    }); 
}); 

viewModel綁定ok,並且qtip顯示隱藏div作爲其cont根據需要。但是,當textarea值更改時,viewModel不會更新。

它的工作,當我刪除div中內嵌CSS,即:

<div data-bind="attr: { id: 'sales-'+year()+'_content' }"> 
<textarea data-bind="value: salesComment, valueUpdate: 'keydown'"> </textarea> 
</div> 

但我需要爲它的使用,只有當用戶查看qtip隱藏默認div的內容。

任何想法爲什麼這個CSS是防止觀察更新viewModel?

+0

如果div未隱藏,它是否仍會更新? ?我懷疑更新不會發生,因爲qtip更改不會觸發適當的事件。 –

回答

1

我認爲問題在於,您將相應div的innerHTML內容作爲qtip內容傳遞,這實際上意味着您複製了HTML並丟失了所有viewmodel綁定。

這裏的問題行:

content = $("#" + this.id + "_content").html(); 

對於這個工作,qtip的內容需要完全一樣的節點你已經綁定的視圖模型相同的元素節點。

我還沒有研究選項qtip接受的內容,但你有沒有嘗試過:

content = $("#" + this.id + "_content")[0]; 

[更新] - 我發現this thread,其中在此筆者的意見。因此,看起來您無法爲版本1的qtip的內容使用相同的元素節點,但是您可以爲qtip版本2執行此操作。

+0

不錯。就是這樣。我現在傳入整個對象並且viewModel正在更新。實際的語法:內容= $(「#」+ this.id +「_content」) – Andrew

+0

我使用的版本2,所以現在都運行良好 – Andrew