2012-04-08 64 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/