2015-03-21 2 views
0

Прямо сейчас у меня есть два маршрута в моем приложении. Есть основной маршрут страницы, в котором есть список идей (только текстовые элементы), а затем есть маршрут для показа и редактирования идей.Iron Router Получить текущий товар?

Моя проблема заключается в редактировании идей ... Я не уверен, как на самом деле получить отредактированный элемент и сохранить изменения. Я мог бы использовать глобальную переменную, но это почти наверняка взломать, а не «метеорный путь» (или правильный путь в любом программном обеспечении, если на то пошло.) Я мог бы использовать 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 и руководство, но, похоже, для него нет прямого списка объектов и методов.

ответ

1

Я думаю, что ваш подход хорош. Чтобы сохранить новый текст просто сделать что-то вроде:

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

Вы можете использовать this._id потому, что вы уже установили свой контекст данных в маршрутизаторе с data: idea, поэтому в вашем Template.ShowIdea.helpers/events «это» относится к конкретной идее.

Что касается вашей стороне вопросы:

  1. Вы можете также использовать template.find() так:

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

Но это менее очевидно, и я думаю, что event.target лучше как элемент DOM (также обратите внимание на difference между event.target и event.currentTarget, но нет проблемы в y наш пример).

  1. Я никогда не встречал никакой другой документации для Iron Router отдельно от упомянутого вами Руководства.
+0

Спасибо, я не понимал, что 'this' будет ссылаться на экземпляр' idea'. Я немного изменил ваш код ... Я почти уверен, что '{_id: this._id}' такой же, как 'this._id'. Я попробовал оба и не видел никакой разницы, и эта страница Try Meteor просто использует 'this._id' в своем' update() ': https://www.meteor.com/try/5 – ArtOfWarfare

+0

Я не помню синтаксис селектора без фигурных скобок для идентификатора. – Guillaume

+0

Теперь у меня есть какое-то смешное поведение из-за того, что редактирование моего div приводит к изменениям в моей базе данных, что вызывает изменения в моем div.Есть ли встроенный способ справиться с этим в Meteor, о котором вы знаете, или мне придется самому справиться с этим (не слишком сложно справиться, просто из того, что я видел до сих пор, Meteor имеет тенденцию для того чтобы иметь довольно обширный комплект включенных батарей.) – ArtOfWarfare

Смежные вопросы