ian*_*arz 2 handlebars.js ember.js ember-data
我正在和我一起工作
我在许多模型上都有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}}在相关模板中使用,我只是不确定在调用堆栈中检查应用程序状态的最佳位置.
所以,我的问题是双重的. 第一个问题:这是我的路由器地图和路线:
App.Router.map(function() {
this.resource('users', function() {
this.route('create');
this.resource('user', { path: ':user_id' }, function() {
this.route('edit');
this.route('delete');
});
});
});
App.UsersRoute = Ember.Route.extend({
model: function() {
return App.User.find();
}
});
// Default for this route
App.UserRoute = Ember.Route.extend({
model: function(params) {
return App.User.find(params.user_id);
}
});
Run Code Online (Sandbox Code Playgroud)
因此,导航到路由时'clients/3'的DS.JSONSerializer会做的extract()对UserRoute和extractMany()的UsersRoute.但是,有趣的是,大多数时候extractMany()(为了获得所有用户的JSON返回)将extract()在单个用户及其侧载属性之前发生.发生这种情况时,侧载属性确实会呈现给模板.但是,每隔一段时间extract()就会出现一次extractMany()(异步"击败"提取多次),侧载属性不会呈现.我认为这是因为如果extract()首先出现的那个模型将在extractMany()当时所有模型发生时重置,这在提取时很多都没有侧载属性.
我通过执行以下操作修复了第一个问题:
App.Router.map(function() {
this.resource('users', function() {
this.route('create');
});
this.resource('user', { path: 'user/:user_id' }, function() {
this.route('edit');
this.route('delete');
});
});
Run Code Online (Sandbox Code Playgroud)
这阻止了两个模型在同一路径中被提取,但以下可能已经解决了这两个问题.
问题二:当浏览远离client/3到clients,然后回client/3再次,该模型将被重置,就像第一个问题-侧载性能会得到下降.
解决这个问题的方法是使用UserRoute's activatehook来重新加载模型.
App.UserRoute = Ember.Route.extend({
activate: function() {
this.modelFor('user').reload();
}
});
Run Code Online (Sandbox Code Playgroud)
这将强制模型在每次"激活"此路由时重新加载侧载属性,这对于我们正在构建的这个特定应用程序是必需的.
希望这有助于某人!
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |