1

是否可以获得属性的相关输入?将模型添加到数组后,我需要关注输入:

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

1 回答 1

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());    

​ ​</p>

于 2012-10-21T20:44:59.920 回答