Ember.js 1.0-pre4 + jQ UI可排序+本地存储适配器

时间:2013-02-02 00:13:01

标签: ember.js

第2天学习ember.js ......

我正在开发一个离线应用,需要将可拖动/可排序的磁贴位置保存到localstorage,如果没有现有数据,请加载&从夹具中救出来。

使用: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/

问题

  1. 检查DS.Store是否已加载且为空的正确方法是什么?我直接查看localstorage的方法感觉不对。

  2. 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

  3. TilesController上我正在使用sortProperties,直到jQ用户界面可以改变DOM并且Ember想要更新我的磁贴顺序,直到我有机会{{1}新的set。我目前的解决方案是在更新模型时暂时关闭order。再一次,这种感觉很糟糕,有关正确方法的建议吗?

  4. ===编辑2月3日===

    如果我执行异步提交,则避免了问题#2中的初始错误。

    sortProperties

1 个答案:

答案 0 :(得分:0)

  • 我会将任何初始代码放在应用程序或setupController方法中的索引Route

    if (localStorage.getItem('fusion-emberjs') == null) {
        App.Tile.DEFAULTS.forEach(function(item) {
            App.Tile.createRecord(item);
        });
    
        //*** WARNING: Generates Error ***/
        App.Tile.find().get('store').commit();
    }
    
  • 在路线中移动代码后,在路线中将App.Tile.find().get('store').commit();替换为App.store.commit()

  • 创建自己的交易,而不是使用默认交易,每次直接调用商店时,您都使用默认交易。您可以通过这种方式创建交易

var transaction = App.store.transaction()
transaction.createRecord(App.Foo);
transaction.commit()
transaction.rollback();
  • 对App.store的任何调用都假定您已经创建了一个商店,现在您只是扩展了DS.Store。尝试改为
App.Store = DS.Store.create({
  revision: 11,
  adapter: 'App.LSAdapter'
});
  • 我建议你在路由器中进行任何事件处理或事务管理,除非它纯粹用于样式或动画。在这种情况下,视图是适合它的地方。我喜欢路由器来协调所有资产(控制器,路由,模型,视图)之间的通信

  • 要记住的好模式是视图仅与控制器对话,控制器仅仅是模型的代理,路由器协调控制器之间的通信并管理路由。