2014-01-30 21 views
0

我有一個任務的數組。檢查數組中的值是否改變,不重複。淘汰賽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> 

所以,當你觸摸的跨度它會轉換到具有任務名稱的值,所以你可以改變它的輸入。我想驗證它在數組中不重複的值的變化。

我所有的任務都在可觀察的數組任務中。

感謝您的幫助

+0

一種可能的方法是使用敲除的訂閱功能。基本上你會訂閱'taskTitle',每次它改變你檢查數組是否有標題。 – Oak

回答

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 

它很漂亮,但它的快速和骯髒的版本。請注意,訂閱每次更改時都會獲得新值。這就是我將數組與新給定值進行比較的地方。訂閱基本上是該變量的觀察者。