我有一个关于使用Ember加载和caching远程对象的问题。 我正在开发一个通过REST API使用服务器端存储的Ember应用程序。 一些获取的数据很less发生变化,因此每次应用程序加载时从服务器获取数据是不必要的。 但是,这也是一个需要离线工作的应用程序的问题,并仍然将其数据保存到服务器。 Ember Data有一个内置的存储适配器,用于通过REST API持久保存模型,并且还有一个适用于本地存储的适配器 (正如Ken所指出的那样)。 问题(如果是问题)是一个模型只有一个存储适配器,似乎没有任何caching提取的模型的概念,而不是将它们保存在内存中。 我在这个Ember的愿望清单以及Tom Dale对这个演讲的评论中发现了类似的要求,但我还没有发现任何迹象表明这是Ember中的一个现有function。 我有两个问题(第一个是重要问题): 什么是今天最好的方式 – 在本地存储中实现caching模型并根据需要与远程数据同步? 这是一个计划包含在Ember中的function,或者至less是维护者认为最终应该添加的东西? 当谈到1),我可以想到几个策略: a)扩展现有适配器并添加自定义远程同步机制: App.Store.registerAdapter('App.Post', DS.LSAdapter.extend({ // do stuff when stuff happens })); b)保持单独的模型类 – 一组用于远程对象,一组用于本地对象 – 并根据需要在它们之间进行同步。 有了标准的Todo案例: RemoteTodo –*sync*– Todo | UI 我有点希望这是一个真正的低调问题,并有一个良好的既定模式。 更新:find这个类似的问题 。 它有一个很好的答案,但这是一种理论。 我想我需要的是一些实际的提示或示例实现的指针。
ember-data.js: https : //github.com/emberjs/data/tree/0396411e39df96c8506de3182c81414c1d0eb981 总之,当出现错误时,我想在视图中显示错误消息,然后用户可以1)取消,这将回滚事务2)纠正input错误并成功提交事务,通过validation服务器。 以下是源代码片段。 它不包含错误callback。 updateRecord: function(store, type, record) { var id = get(record, 'id'); var root = this.rootForType(type); var data = {}; data[root] = this.toJSON(record); this.ajax(this.buildURL(root, id), "PUT", { data: data, context: this, success: function(json) { this.didUpdateRecord(store, type, record, json); } }); }, 总体而言,从服务器接收错误并更新视图的stream程是什么? 看起来,错误callback应该把模型置于isError状态,然后视图可以显示相应的消息。 此外,交易应该保持肮脏。 这样,事务可以使用rollback 。 看来,使用store.recordWasInvalid是朝着正确的方向,虽然。
我有一个组件,当用户点击组件时,它添加一些值来存储,我尝试使用这种方式,但我得到一个错误: OlapApp.MeasureListItemComponent = Ember.Component.extend({ tagName: 'li', isDisabled: false, attributeBindings: ['isDisabled:disabled'], classBindings: ['isDisabled:MeasureListItemDisabled'], actions: { add: function(measure) { var store = this.get('store'); store.push('OlapApp.AxisModel', { uniqueName: measure.uniqueName, name: measure.name, hierarchyUniqueName: measure.hierarchyUniqueName, type: 'row', isMeasure: true, orderId: 1 }); } } }); 这是错误的: Uncaught TypeError: Cannot call method 'push' of undefined MeasureListItemComponent.js:18 推logging可以从组件中存储吗? 为什么我无法访问存储? 我的模型名称是“AxisModel”,应用程序名称空间是“OlapApp”
据我所知,在ember CLI中testingember-data模型时,所有的关系都必须列在needs 。 如果结构简单,这很好,但在很多情况下会有多个层次。 例如,如果模型设置了以下定义的关系: Model a: belongsTo: b belongsTo: c Model b: hasMany: a hasMany: d Model c: hasMany: a belongsTo: e Model d: hasMany b Model e: hasMany c 然后,对于这些模型中的任何一个的每个unit testing将需要在needs列出的每一个其他模型,例如对于c : needs: [ 'model:a' // Because c -> a 'model:e' // Because c -> e 'model:b' // Because c -> a -> […]