当我单击新博客主题的保存链接时,控制台输出是主题对象的空值。当我单击现有博客主题的保存链接时,输出是主题对象的旧值。
为什么单击保存链接时没有为属性赋值?
var viewModel = function(topics){
var self = this;
self.topics = ko.observableArray(topics);
self.editing_topic = ko.observable("");
self.new_topic = function(){
self.edit_topic({});
}
self.edit_topic = function(topic){
self.editing_topic(topic);
form.dialog({width:800, height:600, modal:true});
};
self.save_topic = function(){
console.log(self.topic());
};
};
ko.applyBindings(new viewModel(jsondata));
<fieldset class="blog_topic_form" title="New Blog Entry">
<div>
<label for="topic_title">
Title:
</label>
<input type="text" id="topic_title" data-bind="value: topic().topic_title"/>
</div>
<div>
<label for="message_contents">
Message:
</label>
<textarea id="message_contents" class="message_contents" data-bind="value: topic().message_contents"/>
</div>
<footer>
<a class="save_link" data-bind="click: save_topic"></a>
<a class="cancel_link"></a>
</footer>
</fieldset>
编辑: 这是jsfiddle: http://jsfiddle.net/jLkxG/3/
运行时,它将分配默认值。但是,如果编辑文本框并单击savelink,它将输出原始(初始)值而不是文本框中输入的值。
答案 0 :(得分:1)
您提供的代码并不完全合理。
我假设您提供的字段集标记是对话框的内容?如果是这种情况那么你的输入是什么?
目前,文本框绑定到viewModel上的topic属性,但不存在此类属性。您还希望此主题对象具有topic_title&amp;属性。 message_contents但这些不在您的模型中。如果您存在值绑定以创建属性,则不是它的工作方式。
我认为您需要向我们展示更多代码或提供一个小提琴。我冒昧地在jsfiddle中复制你的代码。
答案 1 :(得分:1)
请更新您的代码以匹配jsfiddle中的代码。
在jsfiddle中,您的editing_topic属性(topic_title和message_contents)应该定义为observable,而不是editing_topic属性本身。
我已更新您的jsfiddle以正常工作:http://jsfiddle.net/jLkxG/4/