2012-04-08 46 views
0

当我单击新博客主题的保存链接时,控制台输出为主题对象的空值。当我单击现有博客主题的保存链接时,输出是主题对象的旧值。2路绑定不起作用

为什么在点击保存链接时不会将值分配给属性?

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

你能张贴这个的jsfiddle?由于它不是viewmodel的属性,我不能说出绑定中的topic()是指什么。 – Tuan 2012-04-09 00:35:43

回答

1

请更新您的代码在的jsfiddle匹配的代码。

在jsfiddle中,您的editing_topic属性(topic_title和message_contents)应该被定义为可观察的,而不是edit_topic属性本身。

我已经更新您的jsfiddle正常工作:http://jsfiddle.net/jLkxG/4/

+0

谢谢,这解决了这个问题 – firebird 2012-04-09 02:26:22

1

您提供的代码没有完全意义。

我假设你提供的fieldset标记是对话框的内容?如果是这种情况,那么你的输入是什么?

目前,文本框绑定到viewModel的主题属性,但不存在这样的属性。您还希望此主题对象具有属性topic_title & message_contents,但这些不在您的模型中。如果您现有的值绑定来创建属性,这不是它的工作原理。

我认为你需要向我们展示更多代码或提供小提琴。我冒昧地在jsfiddle中复制你的代码。

http://jsfiddle.net/madcapnmckay/jLkxG/