javascript - 数据库插入后更新 Meteor js 中的客户端 View

标签 javascript backbone.js meteor reactive-programming

首先,一些背景知识

我的客户端有一种“ Split View”,即一个显示对象列表的侧面板和一个显示的主视图所选对象的详细信息。每次用户单击列表中的对象时,都会调用 Backbone 的路由来导航到更新 session 上的 “selected” 属性的 id,这会导致主视图要更新 - 非常标准的东西。

问题

我希望客户端尽可能做出响应,因此我尝试利用 Meteor 的能力立即更新客户端,而无需等待服务器确认。

我的目标是每次创建对象时,列表主视图都会立即更新以反射(reflect)新添加的对象。为了实现这一点,我创建了一个 Meteor.method,create(),它使用 Collection.insert 并返回 id,以便我可以将它与我的 Route 一起使用。该方法在客户端和服务器之间共享,并从模板的事件处理程序中调用。

我的第一次尝试是将返回的 id 存储在事件处理程序的变量中,并更新下一行中的路由;由于某种原因,这不起作用,因为该方法返回了一个未定义值。所以我尝试了一种不同的方法,我没有返回 id,而是在方法中使用它直接更新Route(当然如果是 Meteor.isClient)。这也不起作用,因为客户端方法版本中 Collection.insert 返回的 id 与服务器版本中的不同。

第一种方法

Template.createDialog.events({
    'click #btn-dialog-create': function (event, template) {
        var objectId = Meteor.call('create');
        appRouter.navigate("object/id/" + objectId, {trigger:true});
    }
});

第二种方法

Meteor.methods({
    create: function () {
        var ObjectId = Objects.insert({name:'test'});
        if(Meteor.isClient){
            appRouter.navigate("object/id/" + objectId, {trigger:true});
        }
    }
});

如果有人知道发生了什么事并且可以给我一些指示,那就太好了。 任何解决问题的不同方法或建议也将不胜感激。

谢谢

更新

所以我尝试了@Pent的建议,得到了与第二种方法相同的结果。由于某些奇怪的原因,Meteor 决定忽略我的 id(使用 Random.id() 创建)并插入具有不同 ID 的对象。

所以我尝试了另一种方法,我只使用了一个简单的字符串值而不是 Random.id() ,瞧 - 它有效。给我一个谜语。

最佳答案

答案已更新:

这将是客户端和服务器方法:

Meteor.methods({
    create: function () {
        var id = Random.id();
        Objects.insert({_id: id, name:'test'});
        if(this.isSimulation) {
            appRouter.navigate("object/id/" + id, {trigger:true});
        }
    }
});

您可以从 Meteor 的派对示例中查看类似的模式:https://github.com/meteor/meteor/blob/b28c81724101f84547c6c6b9c203353f2e05fbb7/examples/parties/model.js#L56

关于javascript - 数据库插入后更新 Meteor js 中的客户端 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19640958/

相关文章:

javascript - 当构造函数的原型(prototype)不是对象时如何创建对象?

javascript - JavaScript 中的 "use strict"不起作用?

Backbone.js - "Object [object Object] has no method ' listenTo'"

mongodb - 使用 Meteor 从 Mongodb 集合调用 handlebars helper 时没有这样的模板错误

javascript - 在 Javascript 中使用 MediaEnded 启动新网页

javascript - 在内容脚本中使用 chrome.tabs 或其他 chrome API 时出现 "Cannot read property of undefined"

javascript - Backbone Model 有条件地触发事件,View 听不到它

javascript - 使用下划线 groupby 按多个属性对一组对象进行分组

javascript - 如何使用帐户密码包判断用户的电子邮件是否已存在

node.js - 新鲜 meteor 1.3 在 win 7 上无法运行