我正在尝试将一些东西与ember + emberdata + router + asp.net web api放在一起.大多数它似乎工作,但我陷入了一个错误消息,当ember-data尝试findAll通过适配器为我的模型时我得到.
在我的后端,我有一个这样的模型(C#):
public class Genre {
[Key]
public int Id { get; set; }
[Required]
[StringLength(50, MinimumLength=3)]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我使用ember-data代表它:
App.Genre = DS.Model.extend({
id: DS.attr("number"),
name: DS.attr("string")
}).reopenClass({
url: 'api/genre'
});
Run Code Online (Sandbox Code Playgroud)
我在我的应用程序中使用RESTAdapter定义了一个Store,如下所示:
App.store = DS.Store.create({
revision: 4,
adapter: DS.RESTAdapter.create({
bulkCommit: false
})
});
Run Code Online (Sandbox Code Playgroud)
商店在我的控制器中使用如下:
App.GenreController = Ember.ArrayController.extend({
content: App.store.findAll(App.Genre),
selectedGenre: null
});
Run Code Online (Sandbox Code Playgroud)
路由器定义为
App.router = Em.Router.create({
enableLogging: true,
location: 'hash',
root: Ember.Route.extend({
//...
genre: …Run Code Online (Sandbox Code Playgroud) javascript ember.js asp.net-web-api ember-data ember-old-router
我正在构建一个ember.js应用程序,我挂了认证.json休息后端是rails.每个请求都使用会话cookie(warden)进行身份验证.
当用户首次导航到应用程序根轨道重定向到登录页面时.会话授权后,将加载ember.js应用程序.加载后,ember.js应用程序使用ember-data RESTadapter和会话进行授权,向后端发出请求.
问题是会话将在预定的时间后过期.很多时候,当发生这种情况时,仍然会加载ember.js应用程序.因此,对后端的所有请求都会返回401 {not autorized}响应.
为了解决这个问题,我认为每次从服务器返回401 {not autorized}响应时,ember.js应用程序都需要通过登录模式通知用户.
有谁知道如何监听401 {not autorized}响应并允许用户重新登录而不会丢失任何更改或状态.
我见过其他方法,如令牌授权,但我担心安全问题.
有人有解决这个问题的工作方法吗?
干杯! 我有ember-data商店:
TravelClient.Store = DS.Store.extend({
revision: 11,
adapter: DS.RESTAdapter.create({ bulkCommit: false, url: "http://someIP:somePORT"})
});
Run Code Online (Sandbox Code Playgroud)
和路由器:
TravelClient.ToursRoute = Ember.Route.extend({
model: function() {
return TravelClient.Tour.find();
}
});
Run Code Online (Sandbox Code Playgroud)
我从远程服务器接收这个JSON:
{
"tours": [
{
"id": "5110e8b5a8fefe71e0000197",
"title": "qui deserunt dolores",
"description": "Id velit nihil.",
"seats": 12,
"options": [
],
"images": [
{
"id": "5110e8b5a8fefe71e0000196",
"url": "url"
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试return TravelClient.Tour.find()失败的时候:
http://someIP:somePORT/tours 404 (Not Found)
XMLHttpRequest cannot load http://someIP:somePORT/tours. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
看起来RESTAdapter似乎不知道它必须接收JSON还是什么?
更新:
在rails服务器端的应用程序控制器中:
def set_access_control_headers
headers['Access-Control-Allow-Origin'] = …Run Code Online (Sandbox Code Playgroud) 我有两个型号:
App.User = DS.Model.create({
comments: DS.hasMany('App.Comment')
});
App.Comment = DS.Model.create({
user: DS.belongsTo('App.User')
});
Run Code Online (Sandbox Code Playgroud)
当用户被删除时,它也会删除后端的所有注释,因此我应该从客户端身份映射中删除它们.
我在其他地方列出了系统上的所有注释,因此在删除用户之后它就会崩溃.
有没有办法指定这种对关联的依赖?谢谢!
我在我的应用程序中使用ember和ember数据.我们如何从Ember中的商店中手动删除记录.目前我正在使用push方法将记录推送到商店.我有一些ember数据保存的问题,所以我用ajax函数进行保存.有没有像record.remove()这样的方法?
根据博客文章的ember-data版本1.0.0-beta.16,商店现在可以用作服务:
TweetComposerComponent = Ember.Component.extend({
store: Ember.inject.service()
});
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何qunit对这样的组件进行单元测试.我尝试过以下方法:
moduleForComponent('tweet-composer', {
needs: ['service:store']
});
Run Code Online (Sandbox Code Playgroud)
和:
moduleForComponent('tweet-composer', {
needs: ['store:main']
});
Run Code Online (Sandbox Code Playgroud)
当我做前者时,我得到一个错误Attempting to register an unknown factory: 'service:store',如果我做后者那么store就是undefined.
思考?
(我正在写一个ember-cli样式应用程序).
更新:
在ember-test-helpers repo中似乎存在一个未解决的问题.
在我等待这个修复的同时,我制作了一个可以作为一种间隙测量的辅助工具(coffeescript):
`import TestModuleForComponent from 'ember-test-helpers/test-module-for-component'`
`import { createModule } from 'ember-qunit/qunit-module'`
# This assumes the last argument, the callbacks, is present, although it
# does support the description being an optional …Run Code Online (Sandbox Code Playgroud) 每个google结果都与ArrayController排序有关.需要一个排序机制而不使用ArrayController.
有一个模型,其中有排序参数.就像说'sortOrder'作为模型中的一个属性(它将来自后端).
将使用#each渲染此模型,但这应该基于sortOrder属性而不是模型的ID属性进行迭代.
我正在研究Java(可能是Scala)的项目,它将使用Ember和ember-data.我知道我可以编写一个后端来格式化JSON,但我想知道是否有任何Java Java包能够以更有效地利用DS.RESTAdapter的格式构建JSON字符串而不构建完全自定义的东西?
类似于Rails Active Model Serializers的东西是理想的,或者是Ember的JSON序列化器和替代REST适配器.
在我需要从头开始构建东西之前,先问问你们.谢谢!
App.User.find()现在是this.store.find(),那么如何从控制台到达那里?
我正在尝试从2个类别(新闻和事件)获得两个2个博客帖子列表,然后在我的主页的2个不同列中显示它们.我需要执行2个单独的Ajax调用来获取这些博客帖子.我不使用ember-data进行此操作,因为我没有看到在这种情况下使用它的优势(但我可能错了).
export default Ember.Route.extend({
setupController(controller, model) {
var wpUrl = 'http://public-api.wordpress.com/rest/v1/sites/company.wordpress.com/posts/?number=2&category=';
Ember.$.ajax({ url: wpUrl + 'news', dataType: "jsonp", type: 'GET' }).then(function (data) {
controller.set('news', data.posts);
});
Ember.$.ajax({ url: wpUrl + 'events', dataType: "jsonp", type: 'GET' }).then(function (data) {
controller.set('events', data.posts);
});
}
});
Run Code Online (Sandbox Code Playgroud)
上面的代码有效.但是从我在Ember纪录片中看到的内容来看,我应该将这些数据放在model钩子中(而不是setupController)以利用承诺.所以我尝试用这种方式重新编写代码:
export default Ember.Route.extend({
model() {
var wpUrl = 'http://public-api.wordpress.com/rest/v1/sites/company.wordpress.com/posts/?number=2&category=';
return {
news: function () {
return Ember.$.ajax({ url: wpUrl + 'news', dataType: "jsonp", type: 'GET' }).then(function (data) {
return data.posts;
})
}, …Run Code Online (Sandbox Code Playgroud) ember-data ×10
ember.js ×10
javascript ×4
ember-cli ×2
json ×2
ember-qunit ×1
java ×1
rails-api ×1