2013-11-28 3 views
1

Я знаю, что это нудный вопрос, но я пытаюсь выяснить, как обновить значение в документе с маршрута в железном маршрутизаторе. Я нашел место, которое мне нужно, чтобы поставить функцию, но я борюсь с кодом манго, необходимым для его работы.Как обновить значение doc от функции iron-router

Я пытаюсь увеличивать элемент вида каждый раз, когда нажимается ссылка, поэтому добавили следующий код к маршруту.

data: function() { 
     var project = projectDocs.findOne(this.params._id); 
     // need to increment views value by one 
     console.log(project.views); 
     projectDocs.update({id: project.id}, 
     {$inc: {views: 1}} 
    ); 
     console.log(project.views); 
     return project; 
    } 

    }); 

Значение по project.views возвращает правильное значение, но код для обновления значения выдает исключение в данный момент.

Я пробовал простую вещь project.views ++, которая увеличивает эту переменную внутри функции, но она никогда не попадает в базу данных (никаких сюрпризов там я не догадываюсь).

Может кто-нибудь указать мне в направлении, которое мне нужно, чтобы получить это значение до inc (и это даже подходящее место для этого?).

Спасибо.

Peter.

ОК, я нашел эту ссылку, которая привела меня часть пути http://books.google.com.au/books?id=uGUKiNkKRJ0C&pg=PA37&lpg=PA37&dq=Cannot+apply+$inc+modifier+to+non-number&source=bl&ots=h7qyOddRsf&sig=EWFw9kNLGHoFEUS-nTNsBStDRcQ&hl=en&sa=X&ei=cRGXUse0DNGciAfk6YHgCA&ved=0CFcQ6AEwBQ#v=onepage&q=Cannot%20apply%20%24inc%20modifier%20to%20non-number&f=false, который объясняет, что вы можете только вкл числовые значения (у меня было это как струны, кажется.

Теперь проблема заключается в том, что я, кажется, быть в бесконечном цикле.

функция теперь выглядит

this.route('projectPage', { 
    path: '/projects/:_id', 
    waitOn: function() { 
     return Meteor.subscribe('singleProject', this.params._id); 
    }, 
    data: function() { 
     var project = projectDocs.findOne(this.params._id); 
     // need to increment views value by one 
     console.log("Views", project.views); 
     console.log("Project", project); 
     projectDocs.update(project._id, 
     {$inc: {views: 1}} 
    ); 
     console.log(project.views); 
     return project; 
    } 

    }); 

Почему это будет зацикливание?

ответ

0

Использование _id вместо идентификатора. Таким образом,

 projectDocs.update({_id: project._id}, 
     {$inc: {views: 1}} 
    ); 

Если это не так, возможно, вы могли бы обновить свой ответ с любым исключением, которое вы получаете.

+0

OK, изменил код, чтобы соответствовать тому, что вы здесь и исключение брошено в консоли «Исключение при имитации эффекта вызова„/ projectDocs/обновление“ Ошибка: не удается применить $ вкл модификатор не-числа \t ... r («Нельзя применять модификатор $ inc для не числа»); Далее следуют целая куча кода. –

+0

Поле просмотра должно быть числом, это все исключение. Исправьте это, и обновление должно работать. – landland

0

Просто прочитайте фантастическую новую документацию на железном маршрутизаторе немного дальше и переместили функцию $ inc к разгрузочному крюку, и все кажется хорошим.

this.route('projectPage', { 
    path: '/projects/:_id', 
    waitOn: function() { 
     return Meteor.subscribe('singleProject', this.params._id); 
    }, 
    data: function() { 
     return projectDocs.findOne(this.params._id); 
    }, 
    unload: function() { 
     var project = projectDocs.findOne(this.params._id); 
     // need to increment views value by one 
     projectDocs.update(project._id, 
     {$inc: {views: 1}} 
    ); 
    } 
    // could possibly use layout: popup_layout? here 
    }); 

Любил бы некоторое подтверждение того, что это на самом деле, где я должен делать это (и это, кажется, немного неэффективно делать так много «findOne» 'с), но его работы на данный момент.