2016-08-24 5 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は値がユーザーから期待どおりに取得されていることを示しています。しかし、タスク配列上の "push"メソッドはまったく効果がないようです。私を案内してください。

+0

問題はあなたのhtmlにあるかもしれないので、あなたがそれを投稿すると役に立つでしょう。私はあなたのコードをテストし(何も変更していない)、私が提供したマークアップで動作しました。あなたの助けを借りて@Adrian、https://jsfiddle.net/ffojupuf/ – Adrian

+0

をご覧ください。私のHTMLコードはあなたのものと似ていて、私は違いwrtバインディングの多くを見つけられませんでした。何が間違っていたのだろうか?私は "textInput"の代わりに "value"を使用しました。それが唯一の違いでした。 –

答えて

1

あなたは、配列タスクに渡している場合は、毎回をしなければならないので、あなたが初期化するとき、あなたは[new Task({...}), new Task({...})]

あなたconsole.log(tasks);が正しくないを使用する必要があります。これは自分のタスク変数を表示しています。あなたのself.tasksではなく、あなたが表示したいと思っているものがありますので、変数名と(なし)varname vs this.varname vs self.varnameを注意してください。頭痛...

最終的にhere you areあなたの例は完全に働いています。

私はこれがあなたに役立つことを願っています。

よろしくお願いいたします。

+0

ありがとうございます!これはうまくいった! –

関連する問題