2016-08-24 67 views
1

在我的HTML頁面中有3個輸入。使用用戶輸入,我希望使用KnockoutJS更新我的頁面元素。這是我寫的腳本:在KnockoutJS中將數據推送到數組的問題

$(document).ready(function(){ 

    function Task(data){ 
     this.goal=ko.observable(data.goal); 
     this.type=ko.observable(data.type); 
     this.date=ko.observable(data.date); 
     console.log("Data"+ " " + data.goal); 

    } 



    var myViewModel=function(tasks){ 
     var self=this; 
     self.tasks=ko.observableArray([{goal:"abc", type:"Intermediate", date:"12/13/1122"}]); 
     self.newGoalText=ko.observable(""); 
     self.newTypeText=ko.observable(""); 
     self.newDateText=ko.observable(""); 


     self.addTask=function(){ 
      self.tasks.push(new Task({goal:this.newGoalText(),type:this.newTypeText(), date:this.newDateText()})); 

      console.log(tasks); 

     self.newGoalText(""); 
     self.newTypeText(""); 
     self.newDateText(""); 


    }//addTask function 

    }//viewModel 


    ko.applyBindings(new myViewModel()) 

}); 

console.log告訴我,值是從用戶獲得的預期。但是,任務數組上的「推」方法似乎根本沒有效果。請指導我。

+0

問題可能在於你的html,所以它會有幫助,如果你發佈它。我測試了你的代碼(沒有改變任何東西),它和我提供的標記一起工作。見https://jsfiddle.net/ffojupuf/ – Adrian

+0

@Adrian,謝謝你的幫助。我的HTML代碼和你的類似,我沒有發現很多不同的wrt綁定。不知道出了什麼問題,但!我使用「值」而不是「textInput」。這是唯一的區別。 –

回答

1

如果要傳遞到您的陣列任務,你必須做的,每次,所以,當你初始化,你必須使用[new Task({...}), new Task({...})]

console.log(tasks);是不正確的。這是顯示你的任務變量,而不是你的self.tasks,我想知道你想要顯示什麼,所以要小心你的變量名和(無)varname vs this.varname vs self.varname,否則你會有這麼多頭痛...

終於here you are你的例子充分工作。

我希望這對你有所幫助。

問候。

+0

謝謝!這工作! –