gpt4 book ai didi

javascript - 激活路由时不执行 ember 模型函数

转载 作者:行者123 更新时间:2023-11-29 16:16:33 25 4
gpt4 key购买 nike

我有一个 ember 路线,我已经将其剥离到

App.MyRoute = Ember.Route.extend({
model: function(params){
console.log("model function executing");
Ember.Object.create()
},
setupController: function(controller){
console.log("setupController function executed");
}
});

当我切换到 MyRoute 时,会执行 setupController,但填充模型的函数永远不会执行。该模型最终只是在 {{link myRoute msg}} 标记中传递的 msg 对象。

在我们切换到该路线时,我需要加载/计算模型的某些部分。为此,我需要能够成功更新模型,或者我需要从 setupController 函数中访问链接中传递的参数。关于如何最好地实现这一目标的建议?

编辑

为了解决这个问题,我创建了一个完整的最小示例来产生此行为:

我的 html 是:

<html>
<head>
<title> This is my Page! </title>

<script src="js/libs/jquery-1.8.2.js"></script>
<script src="js/libs/handlebars-1.0.rc.1.js"></script>
<script src="js/libs/ember.js"></script>
<script src="js/app.js"></script>
</head>

<body>
<script type="text/x-handlebars">
{{#linkTo example App.thing}}<p> go </p>{{/linkTo}}
<div>
{{outlet}}
</div>
</script>

<script type="text/x-handlebars" data-template-name="index">
<p> Initial Text </p>
</script>

<script type="text/x-handlebars" data-template-name="example">
<p> After change </p>
</script>
</body>
</html>

使用应用代码:

var App = Ember.Application.create();

App.Router.map(function() {
this.resource("example", {path: "/example/:id"});
});

App.thing = Ember.Object.create({
id:10,
});

App.ExampleRoute = Ember.Route.extend({
model: function(params){
console.log("in model function");
return new Ember.Object.create();
},
setupController: function(controller){
console.log("in setupController");
}
});

当您单击指向示例路由的链接时,会打印“in setupController”,但不会打印“in model function”。

最佳答案

linkTo 在幕后使用 transitionTo。每当我们使用 transitionTo 时,我们实际上直接提供了上下文/模型,因此不会调用路由上的 model 方法。在上面的示例中,您有 {{#linkTo example App.thing}}。由于我们已经知道上下文是 App.thing,因此没有理由触发 model 方法。当我们不知道模型是什么时,我们只在路由上调用 model。发生这种情况的主要时间是通过 URL 更改输入时。

关于javascript - 激活路由时不执行 ember 模型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14590737/

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