- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 EmberJS 和 Ember Data(最新测试版)为 Sharepoint 2013 创建一个应用程序。 Sharepoint 使用 oData/RESTfull 服务。我已经为我使用的模型创建了一个适配器。但我无法解决以下问题:
App.User = DS.Model.extend({
Email: DS.attr('string'),
Title: DS.attr('string')
});
App.PIF = DS.Model.extend({
Title: DS.attr('string'),
GUID: DS.attr('string'),
AuthorId: DS.belongsTo('user', { async: true})
});
我有这两个模型,正如您所看到的,AuthorId 是异步加载的用户。当我尝试显示authorId 的标题时,该值不会显示,当我记录它时,它是未定义的。当我只显示authorID 时,它会返回一个 promise 。我的猜测是,当创建模板并注入(inject)数据时, promise 并未得到解决。
模板脚本:
<script type="text/x-handlebars" id="index">
<ul>
{{#each item in model}}
{{log item.AuthorId}}
<li>{{item.Title}} Author: {{item.AuthorId.Title}}</li>
{{/each}}
</ul>
</script>
当我只显示authorId而不显示用户的属性时呈现。
Test1 Author: <DS.PromiseObject:ember412>
Test2 Author: <DS.PromiseObject:ember414>
Test3 Author: <DS.PromiseObject:ember416>
test 4 Author: <DS.PromiseObject:ember418>
适配器代码是:
App.UserAdapter = App.OdataAdapter.extend({
findAll: function () {
return this.ajax("../../_api/web/siteusers", "get");
},
find: function (store, type, id, record) {
return this.ajax("../../_api/web/getuserbyid("+ id +")", "get");
}
});
App.PIFAdapter = App.OdataAdapter.extend({
findAll: function () {
return this.ajax("../../_api/web/lists/GetById(guid'e6a89c0b-3b24-4c53-9978-3d3e7ae3f392')/Items", "get");
}
});
我的问题是,我是否正确以及如何解决它。
最佳答案
问题是 PromiseObject 在渲染到 DOM 之前填充模板之前不会解析。
我找到的解决方案是创建一个帮助器来解决 Promise,然后将其返回给 Handlebars。
由于您的 AuthorId 对象实际上是 User 对象,而不仅仅是 ID 值,因此您可以将模型重构为如下所示:
# ./app/scripts/models/user.js
App.User = DS.Model.extend({
email: DS.attr('string'),
title: DS.attr('string')
});
# ./app/scripts/models/pif.js
App.Pif = DS.Model.extend({
title: DS.attr('string'),
guid: DS.attr('string'),
author: DS.belongsTo('user', { async: true})
});
为了符合命名约定,我还鼓励使用小写属性名称。
现在您可以创建一个如下所示的助手(在 CoffeeScript 中):
# ./app/scripts/helpers/author-name.coffee
authorName = (value) ->
# `value` is whatever you pass through from the template. In this case, it'll be the pif model object.
# This needs to be a string.
_authorId = value._data.author_id.toString()
_authorName = @get('users').findBy('id', _authorId).get('title')
return _authorName
AuthorNameHelper = Ember.Handlebars.makeBoundHelper authorName
App.register('helper:author-name', AuthorNameHelper)
现在您已经在 Handlebars 中注册了这个帮助程序(您确实需要在脚本中加载的任何位置调用author-name.js(已编译)文件),您可以在 .hbs/.handlebars 中使用该帮助程序像这样的文件:
<script type="text/x-handlebars" id="index">
<ul>
{{#each pif in pifs}}
<li>{{pif.title}} Author: {{author-name pif}}</li>
{{/each}}
</ul>
</script>
作为关于 Ember 数据模型的简短说明:
要实现此功能,无论您如何将数据导入商店,当您的帮助程序调用它们时,this.store
都必须填充模型数据。这意味着负责索引模板的 Controller (理想情况下是 IndexController)需要能够访问模型。
要为一个 Controller 加载多个模型,您可以在 Ember.RSVP.hash 中提供它们。您的路线示例可能如下所示(同样,在 CoffeeScript 中):
# ./app/scripts/routes/index.coffee
App.IndexRoute = Ember.Route.extend
model: ->
return Ember.RSVP.hash
users: @store.find('user')
pifs: @store.find('pif')
--
如果我的解决方案不起作用,您可以尝试在这里查看:Rendering resolved promise value in Ember handlebars template
该解决方案对我不起作用,因为 this
无法访问其他模型。 YMMV--其他人找到了可行的答案。
关于javascript - EmberJS - 在模板填充数据之前 promise 未解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26522713/
我将其添加到我的 build.gradle 文件中。 build.gradle compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' co
我按照 gamecodeschool.com 的教程制作了一个“Android 2D 滚动射击游戏”。 我遇到错误: "Cannot resolve symbol 'currentViewportWo
这是我的代码,createStoredProcedureQuery在eclipse下面有红线,并且没有解决,我尝试了很多方法仍然无法得到问题所在。 private static EntityManag
我正在 Xcode 6.1 中开发一个针对 iOS >= 7 的 Swift 应用程序,并且无法使用 NSStringDrawingUsesLineFragmentOrigin,因为它尚未解决。我用谷
使用 MSVC 2015 版本 14.0.25431.01 更新 3 .cpp 文件有 #include 项目属性中的 VC++ 包含路径是 $(VC_IncludePath);$(WindowsS
我使用 visual studio 2013 在 C 中编写程序,但出现此错误:MSVCRTD.lib(crtexe.obj):错误 LNK2019:函数 ___tmainCRTStartup 中引用
我正在编写一个更新到 Firebase 的应用程序,但我无法编写 oncancelled 函数,因为它无法解析符号 FirebaseError。 我的代码如下: package com.test.my
我不明白为什么这没有解决,有什么想法吗? “resolve this”确实会打印,但它永远不会回到 .then 中 promise 的解决方案。 var promise = wait(); promi
我在 eclipse/java 中使用 mapView 时遇到以下问题。 使用mapView.getOverlays()我收到错误。 mapView cannot be resolved 我尝试对 m
你能告诉我如何用两组 R.drawable.images 盗版创建 if - else 语句吗? 我已经尝试过,但我收到一个错误代码,提示 pirates is un-resolved。 Bitmap
我关注了this link大多数结果的答案给我的方法 setOnGroupExpandListener 无法解析。我是 android 的新手,目前主要通过查看其他人的做法并尝试向他们学习来做一些事情
import React from 'react'; // import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom/dist
我正在 eclipse(版本 3.6.2)中开发一个 android 应用程序,我刚刚添加了以下内容: 导入 android.webkit.GeolocationPermissions; 但是我得到一
我的网站上有多个视频需要播放()。当 play() 返回一个 Promise 时,我使用 Promise.all() 创建了一个小脚本,因此每个 Promise 都会等待其他 Promise。 try
我们将所有已编译的程序集复制到构建后步骤中的一个输出文件夹中 (d:\c\bin\assemblies)。使用 Windows 和 Microsoft .NET 框架,可以在编译时使用指向该输出文件夹
我有一个数据库查找查询,它返回 150k 个文档,其中每个文档包含三个整数字段和一个日期时间字段。以下代码尝试从游标对象创建列表。迭代光标非常慢——大约 80 秒!通过 C++ 驱动程序执行相同的操作
我想使用 View Pager2 实现 Carousel,像这样预览左右页面: 最初我使用的是支持的view pager1。现在我认为它被删除了 viewPagerhost.setPageMa
我正在 android 中启动基于 Ktor 的客户端,我想使用任何序列化程序,目前,来自 kotlinx 的序列化程序,但其他序列化程序的结果是相同的 - 未找到 JsonFeature(在下面的
我一直被一个 Unresolved 问题所困扰 'R_registerRoutines', 'R_useDynamicSymbols'来自 R CMD 检查的注释。我已经阅读了“Writing R E
我不确定,但我无法用我的生命来解决这个问题。它总是悬而未决。我不是最擅长 promise 的人,所以请帮助我。 export async function getQuotes() { const
我是一名优秀的程序员,十分优秀!