Iron Router 获取当前项目?

Iron Router Get Current Item?

现在我的应用程序中有两条路线。有一个包含想法列表(只是文本项)的主页路由,然后有一个用于显示和编辑想法的路由。

我的问题是编辑想法...我不确定如何实际获取正在编辑的项目并保留更改。我可以使用一个全局变量,但这几乎可以肯定是一个 hack 而不是 "meteor way"(或者在任何软件中的正确方法,就此而言。)我可以使用 Session,但那不是对我来说似乎也很正确......我的印象是 Session 只是为了视觉上的东西(比如暂时隐藏东西。)

所以这是我到目前为止的相关代码:

Router.route('/idea/:_id', function() {
    var idea = Ideas.findOne({_id: this.params._id});
    // Should I save this.params._id in a Session?
    // Is that "the meteor way"?
    this.render('ShowIdea', {data: idea});
}, {
    name: 'idea.show'
});

Template.ShowIdea.events({
    "input div": function (event) {
        var newText = $(event.target).text();
        console.log("newText: " + newText);
        // this event gets called at the right time, and I can see the new text,
        // but how do I know which item to save it on?
    }
});

模板没什么可看的,但这里是:

<template name="ShowIdea">
    <div contentEditable="true">{{text}}</div>
</template>

还有两个问题:

1 - $(event.target).text() 是提取新文本的最佳方式吗?我想不出别的,但对我来说似乎有点啰嗦。

2 - 是否有关于 Iron-Router 的综合文档?我看到了 QuickStart 和指南,但似乎没有任何地方的对象和方法的直接列表。

我觉得你的方法很好。 要保存新文本,只需执行以下操作:

Ideas.update(this._id, {$set: {text: newText}});

您可以使用this._id,因为您已经在路由器中使用data: idea设置了数据上下文,所以在您的Template.ShowIdea.helpers/events中,"this"指的是具体的想法。

关于你的附带问题:

  1. 您也可以这样使用 template.find()

    "input div": function (event, template) {
      var newText = template.find("div").text();
    }
    

但它不那么直接,我认为 event.target 更好,因为 DOM 元素已经填充(还要注意 event.target 和 [= 之间的 difference 17=] 但在您的示例中没有问题)。

  1. 除了您提到的指南之外,我从未找到 Iron Router 的任何其他文档。