Knockoutjs:使用现有数据

时间:2011-12-03 17:12:28

标签: javascript textarea knockout.js

这是代码:

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/

由于ko.observable(),Textarea变空,但如何在textarea中保存现有值?

我在textarea(来自数据库)中有大的多行文档,我想用Knockoutjs的功能编辑它。

感谢。

2 个答案:

答案 0 :(得分:3)

使用jQuery,它将是这样的:

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

答案 1 :(得分: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);或像Newtonsoft JSON.net http://nuget.org/List/Packages/Newtonsoft.Json这样的序列化程序库)来序列化多行文本。