淘汰赛:自动推送阵列

时间:2017-04-22 08:57:02

标签: javascript knockout.js binding

我有一个div绑定到一个可观察的数组,如下所示:

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

我使div的内容可编辑,以便任何更改(用户输入)都会反映在Tags数组中,但这不符合我的假设。似乎没有自动推送可观察数组。我的问题是,如何使用绑定在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": [] };
}

1 个答案:

答案 0 :(得分: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("");
    }
}