我有一个帐户列表,然后我有一个查看链接来详细查看帐户,这是帐户路线。当我点击视图链接时(guid)在通过路由器时不会更新,它只会在URL中更新,但它似乎不会继续执行代码。
当我进行浏览器刷新时,(guid)会被传递到路由器......由于某种原因它无法解决。
我没有使用余烬数据,但将来会使用它。
以下是我的“帐户”模板代码,其中包含“查看”链接:
{{#each accountdata in controller}}
<tr>
<td>{{accountdata.accountnumber}}</td>
<td>{{accountdata.accountname}}</td>
<td>{{accountdata.accounttypestatus}}</td>
<td>{{accountdata.accountuser}}</td>
<td>{{#linkTo account accountdata}}View{{/linkTo}}</td>
</tr>
{{/each}}
accountdata是“accountguid”的上下文,这是我的身份。
这是我的路由器:
App.Router.map(function() {
this.resource("accounts", { path: '/accounts' });
this.resource("account", { path: "/accounts/:accountguid" });
});
App.AccountsRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.set('searchfilter','ALL');
controller.search();
}
});
App.AccountRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.show(controller);
},
model: function(params) {
this.controllerFor('account').set('accountguid',params.accountguid);
},
serialize: function(model) {
return {accountguid: Em.get(model, 'accountguid')}
}
});
我的controller.show是我发送上下文来调用脚本以显示帐户详细信息的地方。
所以我只需要查看每次不执行正确的accountguid然后调用show(context)方法。
由于
这是我的旧路由器代码,100%工作。当我点击一个链接时,它解决了:accountguid,当我刷新浏览器时,它做了同样的事情。我没有任何问题,一切正常。
// //Accounts
// accounts: Ember.Route.extend({
// route: '/accounts',
// index: Ember.Route.extend({
// route: '/',
// connectOutlets: function (router) {
// router.get('applicationController').connectOutlet('accounts');
// router.get('accountsController').set('searchfilter','ALL');
// router.get('accountsController').search();
// }
// }),
// view: Ember.Route.extend({
// route: '/:accountguid',
// connectOutlets: function (router, account) {
// router.get('applicationController').connectOutlet('account', account);
// router.get('accountController').show(account);
// //router.get('accountController').connectOutlet('eventloghistory','eventloghistory');
// }
// })
// }),
答案 0 :(得分:1)
我设法用以下代码解决了我的问题。我现在能够刷新浏览器,我能够点击链接,它将通过当前的:accountguid使用show()方法。
App.AccountRoute = Ember.Route.extend({
model: function(params) {
return {accountguid: params.accountguid};
},
setupController: function(controller, model) {
controller.show(model);
},
serialize: function(model) {
return {accountguid: Em.get(model, 'accountguid')}
}
});
答案 1 :(得分:0)
将您的路由器地图更改为以下内容,它应该可以正常工作
App.Router.map(function() {
this.resource("accounts", function(){
this.resource('account',{path:':account_id'});
});
});
答案 2 :(得分:0)
请向我们展示您的AccountsController和AccountController背后的代码。如果你为整个结构提供一个jsfiddle,那将是最有用的。
一般来说,您可能不知道新的事物流。以下是两种情况中发生的情况: 1.您可以通过设置URL(例如/ account / 5)导航到AccountRoute。 1.1。 AccountRoute的'model'钩子叫做
model: function(params) {
return your model here...
}
使用params = {accountguid:5}。因为您没有使用ember-data,所以应该实现此钩子并初始化并返回模型。 1.2。使用AccountController调用setupController挂钩,并使用模型钩子返回模型。没有背后的代码
controller.show(controller);
目的还不是很明确,但你应该做点什么呢
setupController: function(controller, model) {
this._super(controller, model);
controller.set('content', model);
controller.show(model);
}
正如您所看到的,通过不实现模型挂钩,您的URL保持正确,但路由不知道如何构建所需的模型资源。
您可以通过linkTo调用
转换到路线{{#linkTo account accountdata}}查看{{/ linkTo}}
在这里,linkTo期望accountdata成为路线的完整帐户模型。这意味着它可能不会仅携带像id这样的部分数据(请阅读此文章以获取许可:In latest Ember, how do you link to a route with just the id/name of a model, rather than providing all of its attributes in the linking page?)。 2.1。 AccountRoute的模型钩子被 NOT 调用。 AccountRoute模型属性设置为传递给linkTo的对象(在我们的示例中为“accountdata”)。 2.2。使用AccountController和accountdata对象调用setupController。 如果您的accountdata对象不完整,那么在此处创建一个完整的实例并将其设置为控制器是明智的。
您可以想象,如果您的accountdata类似于{id:5,accountname:“John”,accounttypestatus:“A”,...},那么点击linkTo后,该网址将正确更新为/ account / 5,但帐户模板将接收帐户数据,而不是实际帐户。
P.P。如果以上都不是任何帮助,这可能是您的问题:https://github.com/emberjs/ember.js/issues/1709