通过财产获取输入

时间:2012-10-21 17:43:41

标签: knockout.js

是否有可能获得财产的相关输入?将模型添加到数组后,我需要关注输入:

var newItem = new ChildModel();
this.childItems.push(newItem);
// and then something like this:
newItem.observableProperty.focusInput();

1 个答案:

答案 0 :(得分:1)

您可以查看hasfocus绑定。如果您愿意为selected添加ChildModel属性,可以执行以下操作:http://jsfiddle.net/jearles/sZnbU/

当我将项目推入可观察数组时,我将其selected属性设置为true。这使它成为焦点。每行还有一个Select按钮,您可以选择它。

当我添加新项目时,我会记录这些项目,以便您可以看到selected属性发生变化。最后,如果您单击输入文本框,将其置于焦点,然后单击Log,您将看不到“已选择”的项目。

-

<span>
    New Item: <input data-bind="value:newItem" />
    <button data-bind="click: addItem">Add</button>
    <button data-bind="click: logItems">Log</button>
</span>
<div data-bind="foreach: items">
    <p>
        <input data-bind="value: text, hasfocus: selected" />
        <button data-bind="click: selectItem">Select</button>
    </p>
</div>​

-

var ChildItem = function(text) {
    var self = this;
    self.text = ko.observable(text);
    self.selected = ko.observable(true);
    self.selectItem = function() {
        self.selected(true);
    }
};

var ViewModel = function() {
    var self = this;
    self.items = ko.observableArray();
    self.newItem = ko.observable('');
    self.addItem = function() {
        if (self.newItem().length > 0) {
           self.items.push(new ChildItem(self.newItem()));
           self.newItem('');
           self.logItems();
        }
    };
    self.logItems = function() {
        console.log(ko.toJSON(self.items));
    }
}

ko.applyBindings(new ViewModel());