2017-04-22 29 views
-1

我有結合到可觀察到的陣列像這樣一個div:敲除:自動推用於陣列

<div data-bind="foreach: currentSelected().Tags " contenteditable="true"> 
    <span data-bind="text:$data"></span> 
</div> 

我提出的div的內容的可編輯,使得任何改變(用戶輸入)得到所反射的標籤陣列中,但這並不按我的設想工作。似乎沒有自動推動可觀察數組。我的問題是,如何使用綁定在Tags數組中獲得新值?

這裏是我如何設置currentSelected:

var newBlogEntry = new NewBlogEntry(); 
var newBlogEntryObservable = new NewBlogEntryObservable(newBlogEntry); 
self.currentSelected(newBlogEntryObservable); 

爲NewBlogEntry的功能如下:

function NewBlogEntry() 
{ 
    return { "Id": 0, "Title": "Title", "Description": "Description", "Tags": [] }; 
} 
+0

至少相關:http://stackoverflow.com/questions/19370098/knockout-contenteditable-binding你當然不能有綁定*在* contenteditable元素中,你必須使元素可編輯,然後在變更時映射回'Tags' ... –

+0

參考相關的帖子回答,我的情況是什麼?它是currentSelected()。Tags? –

回答

0

我設法解決這個問題,通過增加一個額外的輸入字段:

<input type="text" placeholder="new tag" data-bind="value:newTag, valueUpdate: 'afterkeydown', enterkey: addNewTag" id="addTag" /> 

回車鍵的綁定如下:

ko.bindingHandlers.enterkey = { 
    init: function (element, valueAccessor, allBindings, viewModel) { 
     var callback = valueAccessor(); 
     $(element).keypress(function (event) { 
     var keyCode = (event.which ? event.which : event.keyCode); 
     if (keyCode === 13) { 
      callback.call(viewModel); 
      return false; 
     } 
     return true; 
    }); 
    } 
}; 

這是可觀察的newTag:

self.newTag = ko.observable(); 
self.addNewTag = function() { 
    if (self.newTag() == '') 
     alert("Enter something in input field"); 
    else { 
     var tag = self.newTag(); 
     self.currentSelected().Tags.push(tag); 
     $("#addTag").val(""); 
    } 
}