例如,我为用户实体设置了以下服务器路由:

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/

10-09 23:52