铁路由器获取当前项目

Iron Router Get Current Item?

本文关键字:项目 获取 路由器      更新时间:2023-09-26

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

我的问题是编辑想法。。。我不知道如何真正获得正在编辑的项目并保持更改。我可以使用全局变量,但这几乎可以肯定是一种破解,而不是"流星方式"(或任何软件中的正确方式)。我可以使用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和一个Guide,但似乎没有一个直接的对象和方法列表

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

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.targetevent.currentTarget之间的区别,但在您的示例中没有问题)。

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