- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对在 emberjs 中实现主从 View 有点困惑。
我的大多数 View 都有一个主视图,它只是标题列表。然后,用户可以单击此类标题,他/她会获得带有详细 View 的覆盖层(有点像典型的新闻站点页面)。
现在,我注意到当 ember 询问主视图的信息时,它会调用如下 URL:/backend/newsitems
。但这些调用可能会变得非常繁重,因为后端返回所有新闻站点及其所有详细数据的列表。但这感觉不对,因为用户只查看主视图,尚未请求任何详细信息。
有没有办法让 ember 清楚地知道主视图只需要几个属性,并且对详细信息的请求应该获取该特定项目的额外属性?
举个例子,我的模型如下所示:
App.Newsitem = DS.Model.extend({
slug: DS.attr('string'),
type: DS.attr('string'),
title: DS.attr('string'),
summary: DS.attr('string'),
text: DS.attr('string'),
thumb: DS.attr('string'),
date: DS.attr('date'),
mediaitems: DS.hasMany('App.Mediaitem')
});
但我的主视图只需要 id
type
title
来显示标题列表和该标题旁边的图标。然后,当用户请求一个新闻站点的详细信息时,应获取所有其他属性。
最佳答案
我通过让服务器在有效负载中包含“部分”属性来解决这个问题。如果只是部分响应,则“partial”将为 true;如果是完整响应,则“partial”将为 false。如果您无法更改服务器 API(因此无法在有效负载中包含“部分”属性),我还将提供解决方法。
正如其他人所建议的,在“详细”路由的模型 Hook 中,如果当前加载的模型只是部分模型,则调用模型的 reload() 方法:
App.ItemRoute = Ember.Route.extend({
model: function (params) {
return this.store.find('item', params.item_id).then(function (item) {
if (item.get('partial'))
return item.reload();
else
return item;
});
}
});
这解决了部分问题,但如果您的用户随后导航到主路由,则 Ember Data 将用服务器响应替换所有字段,并清除未从服务器返回的任何属性值。要解决这个问题,请重写商店的推送方法,如下所示:
App.ApplicationStore = DS.Store.extend({
push: function (type, data, _partial) {
if (data.partial && this.hasRecordForId(type, data.id))
return this.getById(type, data.id);
else
return this._super(type, data, _partial);
}
});
这可确保您的部分负载不会覆盖完整负载。
这里有一个 jsbin 来演示:http://jsbin.com/bejop/6/edit
如果您无法在响应中包含“部分”属性,那么您可以应用与上述相同的逻辑,但在模型中查找将出现在详细响应中但不会出现在您的模型中的特定属性。部分回应。然后当你重写push方法时,你可以这样做:
App.Partials = [
{ type: App.Item, propertyName: 'detailed_description' }
];
App.ApplicationStore = DS.Store.extend({
push: function (type, data, _partial) {
var that = this;
var partial = App.Partials.find(function (p) {
return p.type === that.modelFor(type);
});
if (partial && !data[partial.propertyName])
return this.getById(type, data.id);
return this._super(type, data, _partial);
}
});
关于ember.js - 在 emberjs 中使用更详细的数据动态填充模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15222739/
padding:initial 比 padding:0 有什么优势吗?示例: textarea { padding: 0; } Hello, world! 最佳答案 它们的意思是一
我尝试通过按钮填充 JList,然后在先前填充的 Jlist 上使用 DoubleClick 填充 JTextField。 代码: private void extractUsedVariables
我正在尝试做 var width = ($(this).width() + $(this).css('padding-left') + $(this).css('padding-right' ));
我在导航中添加了悬停效果,遗憾的是悬停也影响了上面的文字。如何在不影响文本位置的情况下向导航添加悬停? 可悲的是,我找不到解决这个问题的方法。 HTML 模板:http://projects.help
我是 F# 初学者,下面代码中的 %-5s 和 %5s 有什么作用?我认为它提供了空间填充,但我不确定它是如何填充的? printfn "%-5s %5s" "a" "b" 当我尝试 prin
我需要选择带狗的用户(带 type 等于“狗”的宠物) var User = Waterline.Collection.extend({ identity: 'user', attribute
我一直在尝试让 Excel 在一组列上应用公式,然后将模式扩展到整个行集。 这导致了以下代码: For i = 0 To avgsheetNames.Count - 1 If Contains(CSt
随着 Flutter 2.0 的发布,FlatButton已被替换为 TextButton . 因此,填充属性不再直接可用,而是作为 ButtonStyle属性(property)。 我的问题是,我该
这似乎是一个简单的问题,但我已经尝试了一个小时,似乎无法弄清楚。 我要做的就是用 Canvas 填充 MainWindow。我找不到任何允许这样做的属性,我能想到的唯一方法是设置 Canvas.Wid
这是a website具有移动 View 。 网站宽度为 640 像素,但 iPhone 以 678 像素渲染文档。在 Android 中看起来很棒。 我添加了视口(viewport)元: 主体 C
我正在使用 GridBagLayout到(当前)显示两行。我知道这种布局对于这项任务来说太过分了,但我正在努力学习如何使用它。问题是我已将两个面板添加到两个单独的行中,并且内容周围存在巨大差距(请参见
我有以下代码已传递给我并创建多边形: var map; function initialize() { var myLatlng = new google.maps.LatLng(-36.4
我在 Jpanel 中有一些项目,然后将其推到顶部并用作基本搜索引擎的工具栏。我遇到一个问题,因为没有足够的空间,所以我的最后一个组合框没有显示。但是,左侧有很多空白空间,我需要移动所有内容来填充 J
我创建了带有阈值的二进制图像。如下图所示如何改变白色形状的颜色以使其可索引? 到目前为止,这是我的代码: void threshold() { cv::Mat src_8uc3_img = c
我有一个 JTable,我想知道是否有更好的方法来填充它,这是我的代码: //Metodo para llenar un jtable con datos de la base public stat
我想要做的是裁剪一个卷以删除所有不相关的数据。例如,假设我有一个 100x100x100 的体积,其中填充了 0,但其中的 50x50x50 体积则填充了 1。如何从原始体积中获得裁剪后的 50x50
因此,我正在创建一种对一组数字进行洗牌的方法,其想法是创建这些数字的总体。因此,我创建了一个循环,对数字进行洗牌,然后将其添加到数组列表中,但是经过一些调试语句后,我发现它确实对数字进行洗牌,但只将最
假设我有这两个类: public class A where T : IEntityWithID, new() { private static EntityInfo entityInfo =
我正在尝试添加用户输入的两个大整数作为字符串。当两个输入字符串的长度不同时,我尝试用零填充较短的数字,但它不起作用。因此,如果我输入 456 和 7,它会给出 3,前面有一些随机字符。感谢您的任何建议
这是我将内容打印到表格 View 的代码 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: Index
我是一名优秀的程序员,十分优秀!