2 日目 ember.js の学習...
ドラッグ可能/並べ替え可能なタイルの位置をローカル ストレージに保存する必要があるオフライン アプリで作業しています。既存のデータがない場合は、フィクスチャから読み込んで保存します。
使用: ember 1.0.0-pre4、ember-data rev11、ember-localstorage-adapter、jQ 1.9、jQ UI 1.9 https://github.com/rpflorence/ember-localstorage-adapter
それは機能していますが、私は少し初心者です。きれいではないと感じており、コミュニティのアドバイスを利用できます。 http://jsfiddle.net/Nsbcu/4/
質問
DS.Store
ロード済みで空かどうかを確認する適切な方法は何ですか? 直視する私の方法は、localstorage
正しく感じられませんでした。私がそれらをコミットする必要
createRecords
があるApp.Tile.DEFAULTS
と感じた後、エラーがスローされます。既知のデフォルトをコミットする必要はありませんが、エラーの原因と、適切にコミットする方法に興味があります。また、 App.ready() コールバックはデフォルトをロードするのに適切な場所ですか?localstorage
が空の場合にのみエラーが発生しますUncaught Error: Attempted to handle event loadedData on <App.Tile:ember231:1> while in state rootState.loaded.created.inFlight. Called with undefined
TilesController
私が使用している では、sortProperties
jQ UI Sortable が DOM を変更し、Ember がset
新しいorder
.sortProperties
私の現在の解決策は、モデルの更新中に一時的にオフにすることです。繰り返しますが、これはハッキーに感じます。これを行う適切な方法についての提案はありますか?
=== 2月3日編集 ===
非同期コミットを行うと、質問 2 の最初のエラーは回避されます。
App.TilesRoute = Ember.Route.extend({
model: function() {
return App.Tile.find();
},
setupController: function(controller) {
if (localStorage.getItem('fusion-emberjs') == null) {
App.Tile.DEFAULTS.forEach(function(item) {
App.Tile.createRecord(item);
});
// Commit async, else generates error
var _this = this;
setTimeout(function() {
_this.store.commit();
}, 1);
}
}
});