gpt4 book ai didi

javascript - 了解 emberjs 模型初始化和依赖关系

转载 作者:行者123 更新时间:2023-12-03 12:13:00 25 4
gpt4 key购买 nike

我现在正在获得 Ember ......意味着在学习和尝试的过程中既很棒又糟糕的时光......无论如何我真的希望有人可以帮助理解这一点:

我的路线图是这样的:

App.Router.map(function() {
this.resource("login");
this.resource("institute", { path: '/institute/:institute.id/' }, function(){
this.resource("all-cases", function(){
});
});
});

在我的loginRoute中,我使用findAll加载模型机构,这会产生一系列机构,这就是 Controller 是ArrayController的原因。一旦身份验证成功或经过验证,我就会通过 API 的商店加载模型。它们由 View 显示,我使用它们来触发 selectInsitute 操作并转换到 all-cases

App.LoginRoute = Ember.Route.extend({
// login controller owns the institutes
model: function(){
return this.store.findAll('institute');
},
actions: {
// this hook is called if authentication fails
sessionAuthenticationFailed: function(message) {
[...]
},
// this hook is called once the login was successfull
sessionAuthenticationSucceeded: function(){
this.controller.sessionAuthenticationSucceeded();
}
}
});

App.LoginController = Ember.ArrayController.extend(SimpleAuth.LoginControllerMixin,{
authenticator: 'authenticator:custom',
// authentication is done, now change some UI and load some models
sessionAuthenticationSucceeded: function (){
[...]
this.set('content', this.store.findAll('institute'));
},
actions : {
selectInsitute : function(institute) {
this.transitionToRoute('all-cases.index', institute);
}
}
});

我的所有情况路线如下所示。 编辑:我将模型定义按照 Steve H 的建议进行。。需求实际上有什么作用吗?感觉一点帮助都没有。

App.AllCasesRoute = Ember.Route.extend(SimpleAuth.AuthenticatedRouteMixin, {
model: function(params, transition, queryParams){
var instModel = this.modelFor('institute');
console.debug(instModel);
var cases = instModel.get('cases');
console.debug(cases);
return cases;
}
});

App.AllCasesController = Ember.ArrayController.extend({
needs: ['login']
});

我将我的两个模型置于这样的某种关系中,但由于我理解如何以正确的方式将 InstituteID 放入其中的问题,案例适配器尚未工作:

App.Institute = DS.Model.extend({
name: DS.attr('string'),
[...]
cases: DS.hasMany('case')
});

App.InstituteAdapter = DS.RESTAdapter.extend({
buildURL: function(type, id) {
return '/api/core/insts'
}
});

App.Case = DS.Model.extend({
name: DS.attr('string'),
institute: DS.belongsTo('institute')
});

App.CaseAdapter = DS.RESTAdapter.extend({
buildURL: function(type, id){
return '/api/core/institute/:instite_id/cases'
}
});

一旦我进入 all-cases 路线,我的 URI 将如下所示:/#/institute/7/all-cases/

在 LoginRoute 上加载机构就像一个魅力,并且向所有案例资源的过渡也进展顺利。以下是我不明白的事情:

  • 一旦我在 all-cases 路线上刷新整个网站,所有研究所模型都会丢失(我可以通过 ember ff 插件看到),并且我想服务器不再请求它们因为该路线不再激活,该路线负责通过商店加载模型。如何确保这些模型始终通过 LoginController 加载并可用?
  • 但是,除了我的机构数据在刷新时丢失的问题之外,如何正确访问所有案例路线上选定的机构,以便通过以下方式从 API 加载案例事件机构的 ID,请参阅 URI,例如7
  • 一旦我选择了一个案例并要加载更多取决于机构 ID 和案例 ID 的数据,一切将如何进行?
  • 我使用 ember-simple-auth 进行身份验证
  • API 和客户端都是我设计的,所以如果您认为其中任何一个出错了,请告诉我
  • 我真的被困在这里,认为我可能会面临设计问题,或者至少是理解问题。这些指南和示例无法再真正帮助我,它们从不处理这种依赖性。
  • 编辑:我将 modeldefiniton 放在 AllCases route ,就像 Steve H. 提议的那样。不幸的是,它不会触发 API 请求,一旦我刷新页面,情况就会变得更糟,因为我的机构都丢失了,而且它也不会尝试请求它们。

我希望到目前为止我提供了有关我的设计的足够信息,并且任何人都可以真正理解我的问题。如果我需要提供更多信息,请告诉我...到目前为止,Ember 真的很棒,我非常想解决这个问题,只是不知道如何继续。预先感谢您对此提供的任何帮助!

最佳答案

当您使用子资源(例如cases)时,您可以通过如下调用获取父资源:

App.AllCasesRoute = Ember.Route.extend(SimpleAuth.AuthenticatedRouteMixin, {
model: function(){
return this.modelFor('institute').get('cases');
}
});

modelFor 方法 (http://emberjs.com/api/classes/Ember.Route.html#method_modelFor):

Returns the model of a parent (or any ancestor) route in a route hierarchy. During a transition, all routes must resolve a model object, and if a route needs access to a parent route's model in order to resolve a model (or just reuse the model from a parent), it can call this.modelFor(theNameOfParentRoute) to retrieve it.

此外,请记住当您使用如下所示的路由器映射时:

this.resource("all-cases", function(){});

它将使用 App.AllCasesIndexRouteApp.AllCasesIndexController 而不是此映射:

this.resource("all-cases");

它将使用App.AllCasesRouteApp.AllCasesController

此外,您不提出案例请求的原因可以这样解决:

App.Institute = DS.Model.extend({
name: DS.attr('string'),
[...]
cases: DS.hasMany('case', {async: true})
});

如果没有{async: true},Ember 将假定数据来自 Institute 的有效负载。

关于javascript - 了解 emberjs 模型初始化和依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24870445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com