Meteor数组作为字符串返回给此

时间:2015-10-25 12:08:55

标签: meteor

在我的Meteor应用程序中,我有一个名为 relatedSentences 的简单数组字段。它是使用SimpleSchema

定义的
 relatedSentences: {
     type: [String],
     label: "Related Sentence",
     optional: false,
     defaultValue: [] 
 },

可以在Mongo控制台中看到它的数据:

"_id" : "ei96FFfFdmhPXxRWb",
"sentence" : "the newest one",
"relatedSentences" : [
    "Ls6EyBkbcotcyfLyw",
    "6HKQroCjZhG9YCuBt"
],
"createdAt" : ISODate("2015-10-25T11:21:25.338Z"),
"updatedAt" : ISODate("2015-10-25T11:41:39.691Z")

但是当我尝试使用 this 访问此字段时,它将作为原始字符串返回。

Template.showSentence.helpers({
   translations: function() {
      console.log("related: " + this.relatedSentences);
      Meteor.subscribe('sentences', function() {
        var relatedSentences = Sentences.find({_id: {$in: this.relatedSentences} }).fetch();
        console.log("rel count" + relatedSentences.length);
        return relatedSentences;
      }); 
   }
});

在控制台中我收到错误消息。查看this.relatedSentences的返回值。它是数组的内容,作为字符串,插入逗号。

related: Ls6EyBkbcotcyfLyw,6HKQroCjZhG9YCuBt
selector.js:595 Uncaught Error: $in needs an array

不确定这里发生了什么。

一些进展

我取得了一些进展,但尚未找到解决方案。通过将 blackbox:true 添加到SimpleSchema定义中,现在返回看起来像数组的内容......但是它仍然失败了。见下文。

  relatedSentences: {
     type: [String],
     label: "Related Sentence",
     optional: false,
     blackbox: true,
     defaultValue: []
  },

现在我在控制台中获得以下结果。这些值现在作为带引号的数组返回,这正是我所期望的。但$ in仍未将其视为一个数组。

["Ls6EyBkbcotcyfLyw", "6HKQroCjZhG9YCuBt"]
selector.js:595 Uncaught Error: $in needs an array

如何填充数据

回答@Kyll - 这是最初填充数据的方式。我正在使用AutoForm,

     {{> afQuickField name='relatedSentences.0' value=this._id type="hidden"}}

然后通过钩子添加数组数据。

AutoForm.addHooks('translateForm', {
   onSuccess: function (operation, result, template) {
      Meteor.subscribe('sentences', function() {
        var translatedSentence = Sentences.findOne(result);
        var originalSentenceId = translatedSentence.relatedSentences[0]
        Sentences.update(
           { _id: originalSentenceId}, 
           { $push: { relatedSentences: result}
        });
        Router.go('showSentence',{ _id: originalSentenceId } );
      });     
   }
});

1 个答案:

答案 0 :(得分:1)

这里的问题是this的范围。您在subscribe函数中引用它,其中this具有不同的上下文。在其工作的上下文中将varibale设置为this,然后使用该变量:

Template.showSentence.helpers({
   translations: function() {
      console.log("related: " + this.relatedSentences);
      var this_related_sentences = this.relatedSentences;
      Meteor.subscribe('sentences', function() {
        var relatedSentences = Sentences.find({_id: {$in: this_related_sentences} }).fetch();
        console.log("rel count" + relatedSentences.length);
        return relatedSentences;
      }); 
   }
});