道歉,如果这不是正确的地方(相对于任何一个库拥有github问题页面,但因为我无法确切地确定哪个库不能正常工作,难以专门记录它。)< / p>
我在我的模型(数组)上使用ember数据片段,并使用localstorage来保存我的模型。在保存的模型上调用回滚时,它似乎将片段重置回原始状态(即没有值),但它仍然将片段本身保留在数组上,而不是将项目从数组中删除。
我有fiddle setup,点击“添加”添加模型,点击查看详情,然后点击“添加”,然后点击“取消”。您可以看到类型+ desc值丢失,但元素仍然存在。
如果我转而使用Fixture适配器,那么一切都按预期工作,只是不知道在哪里开始甚至尝试调试,我已经介绍了多行_super调用,以及什么不试图找出它,但是迷路了。
注意
这是我的实际应用程序的伪版本,当您导航到主页然后回到详细信息页面时,它似乎正确地解析了类型/ desc,它在我的实际应用程序上没有这样做,它仍然保持默认值。然而,刷新页面使其从那时起完美地运作。
任何帮助都非常感谢!
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="//builds.handlebarsjs.com.s3.amazonaws.com/handlebars-v1.3.0.js"></script>
<script src="//builds.emberjs.com/tags/v1.7.0/ember.js"></script>
<script src="//builds.emberjs.com/canary/ember-data.js"></script>
<script src="//raw.githubusercontent.com/lytics/ember-data.model-fragments/master/dist/ember-data.model-fragments.js"></script>
<script src="//raw.githubusercontent.com/kurko/ember-localstorage-adapter/master/localstorage_adapter.js"></script>
<script>
window.App = Ember.Application.create();
App.ApplicationStore = DS.Store.extend();
App.ApplicationSerializer = DS.LSSerializer.extend();
App.ApplicationAdapter = DS.LSAdapter.extend({
namespace: 'cars'
});
App.Car = DS.Model.extend({
make: DS.attr(),
model: DS.attr(),
features: DS.hasManyFragments('feature')
});
App.Feature = DS.ModelFragment.extend({
type: DS.attr(),
description: DS.attr()
});
App.Router.map(function () {
this.route('index', { path: '/' });
this.route('car', { path: '/car/:car_id'});
});
App.IndexRoute = Ember.Route.extend({
model: function() {
return this.store.find('car');
},
actions : {
add: function(model) {
var car = this.store.createRecord('car', {
make: 'Dodge',
model: 'Viper',
features: []
});
car.save();
}
}
});
App.CarRoute = Ember.Route.extend({
actions: {
add: function(model) {
model.get('features').createFragment({
type: 'Something',
description: 'Some desc'
});
model.save(); //*/
},
cancel: function(model) {
model.rollback();
}
}
});
</script>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<script type="text/x-handlebars" data-template-name="index">
{{#link-to 'index'}}Home{{/link-to}}
<ol>{{#each}}
<li>{{#link-to 'car' this}}{{name}} {{model}}{{/link-to}}</li>
{{else}}
<button {{action 'add' model}}>Add</button>
{{/each}}</ol>
</script>
<script type="text/x-handlebars" data-template-name="car">
{{#link-to 'index'}}Home{{/link-to}}
<dl>
<dt>Make</dt>
<dd>{{make}}
<dt>Model</dt>
<dd>{{model.model}}</dd>{{#each features}}
<dt>{{_view.contentIndex}}. {{type}}</dt>
<dd>{{description}}</dd>
{{/each}}
</dl>
<button {{action 'add' model}}>Add</button>
<button {{action 'cancel' model}}>Cancel</button>
</script>
</body>
</html>
答案 0 :(得分:0)
我没有处理数据片段,但片段本身就是一个模型,所以元素/片段仍然存在,因为你已经为它创建了一个记录。
此记录存储在余烬存储中,直到您对其执行操作为止
回滚,通过emberjs.com,这样做 - “如果模型是脏的,这个功能将丢弃任何未保存的更改。”
在这种情况下,模型似乎是片段。回滚消除了更改,这就是它在您的情况下正在执行的操作,删除类型和desc值,但记录本身仍在存储中。
如果你想完全摆脱片段,你将不得不删除它。 http://emberjs.com/guides/models/creating-and-deleting-records/