EmberJS-防止将具有重复属性的记录添加到存储中
EmberJS - Prevent record with duplicate attributes being added to store
我在这里的第一个问题,所以如果以前有人问过这个问题和/或我犯了一些新手错误,请接受我的歉意!
我正试图通过一个简单的练习来了解EmberJS。我正在尝试创建一个关键字列表,我已经有了基本的功能。我希望允许用户在商店中输入一个逗号分隔的关键字列表,但是,如果关键字重复,请发出警报。
因此,我有一个带有Actions对象的ArrayController,其中有一个createKeyword函数。
createKeyword: function() {
// Get the keyword title set by the "New Keyword" text field
var entered_value = this.get('newKeyword');
if (!entered_value) { return false; }
if (!entered_value.trim()) { return; }
var entered_values = entered_value.split(",");
for ( var i=0; i<entered_values.length; i++){
var value = entered_values[i];
value = value.replace(/'+|"|'/g," ");
if ( ! value.trim() ){
continue;
}
value = value.toUpperCase();
alert( "Prior addition:" + this.get('length'));
// Prevent duplicates being added
if ( this.findBy('keyword',value) === undefined ) {
// Create the new Keyword model
var keyword = this.store.createRecord('keyword', {
value: value,
weighting: 1,
isNew: true
});
// Save the new model
keyword.save();
alert( "post addition:" + this.get('length') );
}
else {
alert( "Keyword [" + value + "] already defined");
}
}
// Clear the "New Keyword" text field
this.set('newKeyword', '');
}
我在那里有几个警报——一个是在我检查值并随后在商店上创建Record之前显示阵列控制器的长度,另一个是之后。所以我用3条记录运行这个,说"tom"、"dick"、"harry",如果我把"fred"加进去,第一个警报是3,第二个警报也是3,fred出现了。
我很困惑为什么第二个警报显示的是3而不是4——我假设(也许是错误的)arrayController尚未用新记录更新。
其次,如果我重新启动,然后尝试添加fred,dick作为输入,两者都被添加,我会认为fred应该被添加,dick被拒绝,因为这是重复的。
提前感谢您的任何建议。
Jon
根据您编写代码的方式和使用"ArrayController , I'm going to assume that the model for this particular route is all of your keywords. So the
模型"的方式判断,钩子可能是:
model: function() {
return this.get('store').findAll('keyword');
}
假设这样,我想我可以回答你的问题。
首先,当您创建新记录时,长度不会改变。它应该从3增加到4,但它没有。假设绑定还没有时间更新是正确的。您已将新记录添加到存储区,但存储区还没有时间更新控制器的模型,因为您仍然可以控制程序流。大多数绑定都是在运行循环中异步更新的,因此对于Ember中的许多场景,您不能期望立即更新。
其次,关于添加的重复项,很难说,但我认为这是因为你有一个逻辑错误。
// Prevent duplicates being added
if ( this.findBy('keyword',value) === undefined ) {
在我看来,你好像把keyword
而不是value
放错了。当你输入这个问题时,这可能只是一个拼写错误,但根据你创建模型的方式,keyword
是类型,value
是属性。
最后,请注意:您不应该像创建新关键字时那样重写isNew
属性。这实际上会用一个永久的true
值覆盖EmberData属性。(至少我记得它是这样工作的。我可能错了,但没关系。)isNew
是Ember Data创建的一个计算属性,当对象的状态发生变化时,它会自动更新。不用担心手动设置;只需像往常一样使用该记录,Ember Data将负责其余部分。
- 将记录添加到交叉筛选器dosen't更新dc.js lineChart组
- 使用 XMLHttpRequest 将记录添加到数据库中
- 将记录添加到网格ext js 3.4中
- EmberJS-防止将具有重复属性的记录添加到存储中
- 将记录添加到数据库时更新转发器
- 如何将记录添加到jTable
- 将多条记录添加到模型's系列帆船
- 如何通过axform将多条记录添加到select2表单中
- EXT.NET:“;未捕获的类型错误:无法读取属性'数据'未定义的“;将记录添加到存储时
- 尝试使用php和html将记录添加到mysql
- 在 Jquery 中仅将列表记录添加到容器中一次
- 当新记录添加到他的存储时,网格没有更新
- 如何在Angularjs中向父记录添加子行
- 如何动态地将记录添加到flex中的数组中
- Jquery根据数据库记录添加列
- 流星:向现有记录添加子文档
- 使用C#/MVC/Javascript将记录添加到数据库中
- 当记录添加到集合中时,将默认数组对象添加到子数组中
- 为每个JSON数据记录添加对象
- ExpressJS在将记录添加到数据库后重新查询数据库