我正在开发一个推送应用程序,需要从DS.Store中删除项目而不调用任何操作.我可以使用load()插入对象,但需要能够在另一个客户端上删除对象后"卸载"它.
谢谢
在我的应用程序中,我试图保持路由结构尽可能接近API结构,这对于基本情况有用,但我仍然对以下情况感到困惑:
(参考http://emberjs.com/guides/outlets/#toc_nesting的例子)
检索/posts/:post_id/comments数据的最佳方法是什么(假设它没有给我/posts/:post_id)?
我应该以App.Comment.find(...)某种方式将帖子ID传递给comments.deserialize(...)方法吗?有没有比获得帖子ID更好的方法router.getPath('postController.content._id')?我正在使用修改后的DS.RESTAdapter.
是否有夹具适配器的提交方法?它有什么作用?据我所知,store.commit()当与REST适配器一起使用时会发出API调用.
我可以使用isLoaded夹具适配器的属性吗?
基本上我有2个记录在我的控制器名为x和y和具有的许多记录的属性内容y类型.咖啡代码如下:
someMethod: (->
content.removeObject(y)
).('x.isLoaded')
anotherMethod: ->
//modify x
Application.store.commit()
Run Code Online (Sandbox Code Playgroud)
当我调用anotherMethod它更新x并在商店上运行提交时,因此someMethod被调用.我的实际应用程序运行正常,但如果测试从内容和商店中someMethod删除记录y.难道是isLoaded和commit不是为固定数据存储?
我可以使用以下方法解释多元化:
DS.RESTAdapter.configure("plurals", {
query: "queries"
});
Run Code Online (Sandbox Code Playgroud)
但我需要将".json"附加到正在生成的所有路由,因为我正在使用的API会抛出错误,如果不这样做的话.苦苦寻找有关ember-data的文档,最好的方法是什么?
我想知道如何中止请求.
例如,我发布App.MyModel.find(),后来我想在从服务器返回之前取消/中止它.我希望这样的事情:
var res = App.MyModel.find(); //request sent to server
res.abort(); // abort the request before completion
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - 返回的对象是a promise,既没有abort也没有cancel方法.
我正在寻找如何abort在底层XMLHttpRequest对象上调用该方法.
我一直在我的应用程序中收到此错误,但不知道是什么导致它.
每当我提交数据存储时它都会发生:
loadedData在状态rootState.loaded.updated.inFlight中尝试处理事件.调用未定义
任何人?
以下是导致它的代码:
var ts_setting;
ts_setting = Cluey.Setting.find(Cluey.SettingsKeyIDs.API_TIMESTAMP);
if (ts_setting.get('value') != null) {
console.log("Found Timestamp");
} else {
console.log("Creating Initial Timestamp...");
ts_setting.set("id", Cluey.SettingsKeyIDs.API_TIMESTAMP);
ts_setting.set("value", 0);
Cluey.store.commit();
}
Run Code Online (Sandbox Code Playgroud)
编辑
我把它归结为导致错误的以下代码(用coffeescript编写).问题是,第一次运行代码时,当数据存储中的对象首次存在时,运行正常.当我在已包含具有指定id的记录的数据存储上运行代码时,会发生错误.这可能有助于您破译正在发生的事情.
ts_setting = Cluey.Setting.find(Cluey.SettingsKeyIDs.API_TIMESTAMP)
ts_setting.get('value')
ts_setting.set("id", Cluey.SettingsKeyIDs.API_TIMESTAMP)
ts_setting.set("value", 0)
Cluey.store.commit()
Run Code Online (Sandbox Code Playgroud)
编辑2
我在创建记录时遇到类似的问题:
ts_setting = Cluey.Setting.createRecord
id: Cluey.SettingsKeyIDs.API_TIMESTAMP,
value: 0
Cluey.store.commit()
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我这个错误:
Uncaught Error: Attempted to handle event `loadedData` on <Cluey.Setting:ember327:1> while in state rootState.loaded.created.inFlight. Called with undefined
Run Code Online (Sandbox Code Playgroud)
编辑3
所以事实证明我@timestamp = ts_setting.get('value')在提交商店后正在调用,我认为这是导致问题,因为我试图从尚未保存的对象中获取一些数据.
我正在和我一起工作
我在许多模型上都有Ember Data加载关系,因此我可以模拟侧载关系,如下所示:
// Models
App.Client = DS.Model.extend({
company: DS.attr('string'),
accountNumber: DS.attr('string'),
startDate: DS.attr('mysqlDate'),
// Relationships
campaigns: DS.hasMany('App.Campaign'),
users: DS.hasMany('App.User'),
phones: DS.hasMany('App.Phone'),
addresses: DS.hasMany('App.Address')
});
App.User = DS.Model.extend({
email: DS.attr('string'),
password: DS.attr('string'),
// Relationships
userType: DS.belongsTo('App.UserType'),
role: DS.belongsTo('App.Role'),
clients: DS.hasMany('App.Client'),
phones: DS.hasMany('App.Phone'),
addresses: DS.hasMany('App.Address')
});
<!-- template -->
<script type="text/x-handlebars" data-template-name="user/index">
<h2>{{email}}</h2>
<h5>Clients</h5>
<ul>
{{#each client in model.clients}}
<li>{{client.company}}</li>
{{/each}}
</ul>
</script>
Run Code Online (Sandbox Code Playgroud)
这非常有效...除了每10次重新加载一次之外.每隔一段时间,侧载关系(在这种情况下是hasMany关系model.clients)不会渲染到模板,而所有其他模型属性(不是关系)都会呈现给模板.奇怪的是它每隔一段时间才会这样做.
我不太确定如何为这个问题设置js小提琴,所以我想问:
在调用堆栈中我可以设置一个断点来查看实际渲染的属性是什么?
我{{debugger}}在相关模板中使用,我只是不确定在调用堆栈中检查应用程序状态的最佳位置.
我正在学习EmberJS并需要一些帮助.
我有两个模型:Catalog和CatalogCourses.目录中有许多目录.我只是想用一些灯具测试这种关系.
当我加载Catalog的记录时,关系夹具(CatalogCourses)不会加载.我已经坚持了几个小时,我认为这样做应该很简单,所以我要求你的帮助.
以下是模型:
App.Catalog = DS.Model.extend({
year: DS.attr('string'),
catalogCourses: DS.hasMany('catalog_course')
});
App.CatalogCourse = DS.Model.extend({
catalog: DS.belongsTo('catalog')
});
Run Code Online (Sandbox Code Playgroud)
以下是赛程:
App.Catalog.FIXTURES = [
{
id: 1,
year: '2014',
catalog_courses: [ 1 ]
}
];
App.CatalogCourse.FIXTURES = [
{
id: 1,
catalog: 1
}
];
Run Code Online (Sandbox Code Playgroud)
这是我试图简单列出这种关系的小提琴:http: //jsfiddle.net/6Evrq/75/
我正在使用ember v1.5.0,ember-data v1.0.0-beta.7,handlebars v1.3.0和jQuery 1.11.0
我尝试使用该{async: true}选项,但问题仍然存在.
有什么想法吗?
我的模型通过Ember默认使用服务器RESTAdapter.
我刚刚/mail在我的服务器上创建了一个自定义端点,如果提供了名称,有效的电子邮件地址和文本,它会发送一封电子邮件.
如何让Ember发送自定义的后期请求?是否可以没有Ember.ajax?
我是初学者.
我想将数据从路由发送到组件.
import Ember from 'ember';
var model = null;
export default Ember.Route.extend({
model() {
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
我已经在路线中定义了这个模型,现在我想在组件js文件中使用这个模型.我只是做控制台日志,但它给出了undefined.我的组件js代码如下
import Ember from 'ember';
export default Ember.Component.extend({
didInsertElement() {
console.log(model);
}
});
Run Code Online (Sandbox Code Playgroud)
所以任何人都可以建议在组件中使用路由数据的实际方法是什么.