2011-12-03 24 views
0

在這裏工作是代碼:Knockoutjs:與現有數據

HTML:

<textarea data-bind="value: MyText"> 
    Hello world 
    line 2 
    line 3 
</textarea> 

JS:

var viewModel = 
{ 
    MyText : ko.observable() 
}; 
ko.applyBindings(viewModel); 

http://jsfiddle.net/HSfuq/

textarea的變空,因爲ko.observable(),但我如何在textarea中保存現有值?

我在textarea(來自數據庫)中有大的多行文檔,我想用Knockoutjs的功能編輯它。

謝謝。

回答

2

不要提取HTML文本,只是讓你的視圖模型是這樣的:

var viewModel = { 

    MyText : ko.observable("I'm the data from the server") 

}; 

ko.applyBindings(viewModel);  

http://jsfiddle.net/HSfuq/1/ 我寧願第一種方法。

或者你可以從這樣的HTML提取文本,如果你必須這樣做:

HTML:

<textarea data-bind="value: MyText" id='textareaID'> 
    Hello world 
    line 2 
    line 3 
</textarea> 

JS:

//using jQuery, but you could do this otherwise as well 
var texareaText = $('#textareaID').text(); 
var viewModel = { 

    MyText : ko.observable(texareaText) 

}; 

ko.applyBindings(viewModel); 

http://jsfiddle.net/HSfuq/2/

或者使用JSON序列化(您喜歡的任何方式,來自MVC控制檯的return JSON(yourDataIncludingMultiLineText); r操作或像Newtonsoft JSON.net的序列化程序庫,以便序列化多行文本。

+0

嗯。當然,我知道這一點。但文件大而多行。 你能提供一個支持''''的多行示例嗎? – Lari13

+0

感謝舉例,但我認爲在knockoutjs中有這個本地支持:) – Lari13

+1

在KO中,任何東西的「源」都是你的視圖模型。不在視圖模型中,它「不存在」 –

3

使用jQuery,這將是這樣的:

var viewModel = { 
    MyText : ko.observable($('textarea').val()) 
}; 
ko.applyBindings(viewModel);