检查数组中的值是否更改不会重复。淘汰赛

时间:2014-01-30 23:45:29

标签: javascript knockout.js

我有一系列任务。

var task = function(name){
    var self = this;
    self.taskTitle = ko.observable(name);
 };

function taskViewModel(){
    var self = this;
    self.title = ko.observable('');
    self.tasks = ko.observableArray([]);

    self.addTask = function (){
       self.tasks.push(new task(self.title());
}

这是html:

<td>
   <span data-bind='text: taskTitle, visible: !editing(), click: $root.editItem'></span>
   <input data-bind='visible: editing, selectAndFocus: editing, value: taskTitle, hasFocus: editing'>
</td>

因此,当您触摸跨度时,它将转换为具有任务标题值的输入,以便您可以更改它。我想验证数值的变化,它不会在数组中重复。

我的所有任务都在可观察的数组任务中。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

在这里你去jsfiddle

function task(name, parent){
    var upArray = parent;
    var self = this;
    self.taskTitle = ko.observable(name);
    self.oldCopy = ko.observable(name);
    self.editing= ko.observable(false);
    self.editNow = function(){
        self.editing(true);
    };
    self.blurOut = function()
    {
        self.editing(false);
    };
    self.oldCopy.subscribe(function(newVal){
        if (upArray.tasks)
        {
            for(var i = 0; i < upArray.tasks().length; i++){
                if (upArray.tasks()[i].taskTitle() === newVal){
                    self.oldCopy(self.taskTitle());
                    return;
                }
            }
            self.taskTitle(newVal);
        }
    });

}

function taskViewModel(){
    var self = this;   
    self.title = ko.observable('Title');
    self.tasks = ko.observableArray([new task('oak', this)]);
    self.tasks.push(new task('tree', this));

}

 ko.applyBindings(new taskViewModel()); // This makes Knockout get to work

它非常草率但它的快速和脏版本。请注意订阅,每次更改时我都会获得新值。这就是我将数组与新给定值进行比较的地方。订阅基本上是该变量的观察者。