2011-12-02 7 views
1

で複数のプロパティを持つ新しいアイテムを追加します。私はかなりknockout.jsサイト上でこの例を次のようだ:は、私は、ボタンがクリックされたときに観察配列に新しい項目を追加しようとしているknockout.js

<form data-bind="submit:addItem"> 
    <input id="comment" data-bind="value:itemToAdd.comment, valueUpdate: 'afterkeydown'" /> 
    <input type="submit" value="Save contact" /> 
</form> 

あなたが見ることができるように(これは例との違いである)、私の「itemToAdd: http://knockoutjs.com/examples/betterList.html

ここでは、関連するHTMLです"は複数のプロパティを持ち、そのうちの1つは"コメント "です。だから私はこのようにバインドしようとしている: "値:itemToAdd.comment"(私も "値:itemToAdd()。コメント")を試してみました。しかし、それは動作していないようです。ここに私のビューモデルの関連部分があります:

var viewModel = { 


    contactHistory: [{comment: 'test', date: '12/12/2011'}, {comment: 'test2', date: '12/11/2011'}], 

    itemToAdd: new ko.observable({ comment: 'dd', date: '' }), 

    addItem: function() { 
      alert(this.itemToAdd().comment); 
       if (this.itemToAdd().comment != "") 
       { 
        this.contactHistory.push(this.itemToAdd()); 
       } 
      } 
} 

警告常に「DD」を表示し、そうitemToAddが正しくテキストボックスにバインドされていないようです。誰かが私が間違ってやっているアイディアを持っていますか?

答えて

2

通常はitemToAdd().commentとなりますが、データバインド内のプロパティが観測可能でなく、ネストされている場合、KOは実際には正しく書き込めません。

commentを以下のように観測することで、確かに解決できます。http://jsfiddle.net/rniemeyer/mFkGT/その場合には、itemToAddを観測可能にする必要はありません。

別のオプションは、commentに対して結合する前itemToAddの範囲に入ることであろう。 1.3では、with: itemToAddhttp://jsfiddle.net/rniemeyer/SDAhd/のように使用できます。余分な範囲を必要としない場合は、http://jsfiddle.net/rniemeyer/ZmDwW/のようなコンテナレスのバインディングを使用できます。 http://jsfiddle.net/rniemeyer/sb6vD/

+0

ありがとう:前1.3へ

、あなたのような何かをするdataパラメータとの結合テンプレートを使用することができます。私は値を試してみました、私の元の質問に言及しておく必要があります。itemToAdd()にもコメント。間違っている可能性のあることが他にもありますか? – Stefan

+0

私は参照してください。 KOには、ネストされた非観測可能なものへの書き込みに問題があります。あなたが持っているいくつかのオプションで答えが更新されました。 –

+0

偉大な答えをありがとう。本当に助けてくれました。あまりにも私はupvote一度しかできない:) – Stefan

関連する問題