例如,我为用户实体设置了以下服务器路由:
GET /users/ // gets collection of users
GET /users/:id // gets user :id
GET /users/me // gets the current user
在我的应用程序开始时,我想从服务器中获取当前用户并存储它...类似以下内容:
App.addInitializer(function () {
$.get('/users/me')
.done(function processCurrentUser (userJson) {
App.user = new User(userJson);
});
});
我的问题是此API调用应实际驻留在哪里。遵循以下原则会更好吗?
App.addInitializer(function () {
App.user = new User();
App.user.fetchMe(); // performs the api call above
});
还是我应该在控制器内部做某事?
谢谢您的帮助!
最佳答案
进行提取时,我总是担心其asyn
行为将如何影响依赖于该数据的组件。如果没有下游组件在可以合理预期返回之前需要数据,那么从技术上讲,您的方法没有任何问题。
但是,还有另一种加载全局变量的可能方法。我经常做的事情(对于用户列表也是如此)是将数据引导到初始加载页面。我通常将其加载到window
变量上。因此,对于您的示例,在您的后端模板中,
<script>
window.globals = {};
window.globals.currentUser = @Html.Raw(Json.Encode(ViewBag.User))
</script>
当然,您可以用自己喜欢的后端模型替换
@Html.Raw(Json.Encode(ViewBag.User))
(我们使用C#)。然后在您的应用程序启动中,确保您拥有以下模型:
App.addInitializer(function () {
App.user = new User(window.globals.currentUser);
});
关于javascript - 在 Marionette mvc模式中,在何处放置不同的get API调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30292075/