2

我们正在尝试移动我们的一些应用程序以使用主干和美味派。我设置了 REST api,它正在处理一些基本示例。但是,目前我们将 ajax 请求发布到自定义 url 时存在一些问题,并且在该视图中执行一些操作,例如

  • 制作相关对象
  • 调用几个相关函数

但是,现在我已经将其中一些功能切换为使用主干和 REST api,我不确定所有这些应该去哪里!

比如我有一个view做a Message,当我做a的时候Message,我也做了a Notification,调用了一个函数给用户加点。就像是

def ajax_send_message(request):
    ## ... set up some variables ...
    ## Make the new message
    message = Message(user=user, content=message)
    message.save()

    ## Make the notification
    notification = Notification(message=message)
    notification.save()

    ## Give the user points
    user.add_points_for_message();

    return json_response({"status": "ok"})

现在——我只是应该在 JavaScript 中完成这一切吗?我也有一个MessageBackbone 模型。

// Create message backbone object
var msg = new Message({content:content, user: user});

// Post to server
msg.save(); 

// Add to backbone collection
messages.add(msg);

我查看了 sweetpie 的不同部分,似乎您可以创建自定义 URL 端点,也可以进行验证,但这似乎不是调用相关方法的正确位置。似乎调用相关方法违背了它的 REST 部分——但是它们应该去哪里呢?

如果我只想在创建对象时向主干添加一些逻辑,那会去哪里?

4

1 回答 1

2

我建议的第一件事是将您的思维模式转换为基于事件的模型,您的代码对事件做出反应。在上面的示例中,您将模型保存到服务器,然后立即将其添加到集合中。你怎么知道模型被正确保存了?这种程序化的编程风格在同步的、服务器端的编程风格中效果更好。

在客户端编程的异步世界中,您发出请求,然后设置回调,根据您正在侦听的事件确定接下来会发生什么。在您的情况下,您希望在成功保存消息后以某种方式做出反应,对吗?您可以为保存操作定义成功回调,如下所示:

msg.save({
    success: function(model, response, options) {
        messages.add(model);
        // code to add notification
        // code to add points
    }
});

基本上,您是在说“我想保存这个模型,然后监听一个成功事件。当事件到来时,执行以下代码。” 另请注意,我将从 API 返回的模型添加到集合中,因为这是持久保存到服务器的确切对象,因此添加比您创建的模型更合适。

于 2013-09-25T21:33:36.003 回答