2012-03-24 8 views
0

私はbackbone.jsを使用して簡単なデモアプリケーションを作成しようとしていますが、jeromegnのローカルストレージアダプタを使用して問題を保存しています。私は彼のtodoのデモを読んだが、まだ私が逃しているものを見逃す。これはおそらく単純なものです....なぜこの単純なbackbone.jsアプリケーションは永続化せずにlocalstorageに読み込まれませんか?

この簡単なアプリケーションは、https://github.com/paulspencerwilliams/backbone_tutorialで見つかるだけで、コレクションがメモリに保存されるだけで、localstorageには何も書き込まれません。

感謝の気持ちでお待ちしております。

+0

GitHubのサンプルプロジェクト用のリンクです。 –

答えて

3

Backbone.localStorageプラグインは、Backbone.syncの代わりに使用されます。通常、Backbone.syncは、サーバーへの変更の取得と永続化を処理します。 syncメソッドは、モデルオブジェクトに対してsaveメソッドが呼び出されたときなど、特定の時刻にのみ起動されます。

サンプルコードでは、モデルをAddressBookコレクションに追加していますが、syncへの呼び出しは発生しません。 this.addressBook.create(newContact)handleNewContactから呼び出すと、アイテムはChromeのlocalStorageに表示されます。

var AddView = Backbone.View.extend({ 
    // snip 

    handleNewContact: function(data) { 
     var inputField = $('input[name=name]'); 

     var newContact = new Contact; 
     newContact.name = inputField.val(); 
     this.addressBook.create(newContact); // minor tweak here 

     inputField.val(''); 
     router.navigate('', true); 
    }, 

    // snip 
}); 

私はそれを読んでいた間、私はコード内の他のいくつかのマイナーな問題をクリーンアップするので、あなたは私が知っているため、これはまだ失敗した場合。プルリクエストなどを送ることができます。

+0

ちょっとジョシュ、それははるかに良いと大きな説明のようです。あなたが提案したように、呼び出しが暗黙的だと思っていましたが、私はちょうど作成/追加の違いを拾いませんでした。連絡先を追加すると、私はlocalstorageに2つのエントリがあることを知っています。 1つはaddressBookのキーで、もう1つは実際のエントリのキーaddressBook/idです。ただし、ページをリロードすると、フェッチが失敗します。喜んでお手伝いいただける場合は、必ずプルリクエストを発行してください。乾杯!! –

+1

こんにちはジョシュ、作業を読み込むことができました。エラーは2倍でした。最初に、AddressBookクラスの後にContactが定義されているため、読み込みに失敗しました。第2に、contact.set( 'firstname')= 'abc'を使用するのではなく、contact.firstname = 'abc'などのプロパティを設定していました。数分待っていれば、コードの品質を少し向上させるために、アプリケーションの改善をいくつか提案すれば嬉しいです。助けをもう一度歓迎してください! –

+1

'fetch'はローカルでも失敗していました。主な問題は、 'AddressBook'変数の後に' Contact'変数を宣言していたので、 'addressBook.model'は未定義で、' fetch'はどの種類のオブジェクトを作成する必要があるのか​​判断できませんでした。開発中のBackboneとUnderscoreの未使用バージョンを使用することを強くお勧めします。図書館はよくコメントされており、学習が大幅にスピードアップします。 –

関連する問題