无法在Aldeed的Autoform MeteorJS框架中插入关系ID

时间:2015-07-03 15:31:14

标签: meteor meteor-autoform

MeteorJS新手。我开始制作一个新颖的Clan / Samurai应用程序,看看我是否能理解mongo / meteor和Autoforms如何处理关系。我试图让氏族和武士相互联系,以便每个武士都有一个特定的氏族。

我正试图将氏族数据插入武士身份。我似乎无法做到。

我已经阅读了以下内容,但似乎仍然对如何实现这一点感到困惑。我曾经尝试过,onsuccess,onsubmit hooks。我试图设置模式,以便它可以工作。我主要得到AutoForm undefined或Schema undefined ......似乎有很多错误。我读过它应该是客户端。

我可以控制日志并让它渲染但我无法将新项目添加到集合中。

随机Github为观赏乐趣

https://github.com/qtheninja/SamuraiAttack

https://github.com/aldeed/meteor-collection2/issues/31 How to add a relationship or reference with AutoForm in Meteor? Meteor Autoform package with collection2 does not submit the form

// LIB /集合/ clans.js

 Clans = new Mongo.Collection('clans');

    Clans.attachSchema(new SimpleSchema({
     name: {
     type: String,
     label: "Clan Name",
     max: 100
     }
    }));

    if (Meteor.isServer) {
     Clans.allow({
    insert: function (userId, doc) {
      return true;
    },

    update: function (userId, doc, fieldNames, modifier) {
      return true;
    },

      remove: function (userId, doc) {
       return true;
      }
     });
    }

// LIB /集合/ samurais.js

  Samurais = new Mongo.Collection('samurais');

    Samurais.attachSchema(new SimpleSchema({
     title: {
     type: String,
     label: "Title",
     max: 100
    },
     description: {
     type: String,
     label: "Description",
     optional: true
    },
     clan: {
      type: Clans
      }
    }));

  if (Meteor.isServer) {
  Samurais.allow({
    insert: function (userId, doc) {
      return true;
    },

    update: function (userId, doc, fieldNames, modifier) {
      return true;
    },

    remove: function (userId, doc) {
      return true;
     }
     });
    }

//客户/模板/部族/ createClan.html

    <template name="CreateClan">
    <h1>Create New Clan</h1>
    {{> quickForm 
    collection="Clans"
    id="insertClanForm"
    type="insert" 
    buttonContent="Create"
    }}
     <div>
       {{> ListClans }}

  </div>
</template>

//客户/ main.js

     AutoForm.addHooks('insertSamuraiForm', {

      before: {
      insert: function(doc, template) {

        //modify the document here
                  doc.clanid= 45;
          doc.dance ="start again";
          console.log("running after hook");
          return true;
       }
       }

  });

     AutoForm.hooks({
  insertSamuraiForm: {
    before: {
      insert: function(doc, template) {
        //modify the document here
          doc.projectid= "random";
          doc.dance ="start again";
          console.log('this is asecond form');
      }
      }
    }
  });

1 个答案:

答案 0 :(得分:0)

我能够通过执行以下操作来解决此问题。

  1. 使用'before'hook
  2. 返回对象
  3. Router.current()。params._id 一个。我正在使用铁路由器,在我的网址中是clans / _id / samurai / new
  4. 将'dance'和'clanid'添加为simpleschema的一部分。我忽略了将它们作为模式的一部分包含在内,所以我让console.log工作但不是数据分开对象。
  5. // client / lib / main.js(更改)

    之前:{   insert:function(doc,template){

    //modify the document here
      doc.clanid= Router.current().params._id;
      doc.dance ="start again";
      console.log("running after hook");
      return doc;
    

    } }

    // LIB /集合/ samurais.js

    Samurais = new Mongo.Collection('samurais');
    
    Samurais.attachSchema(new SimpleSchema({
      title: {
        type: String,
        label: "Title",
        max: 100
      },
      description: {
        type: String,
        label: "Description",
        optional: true
      },
      clanid: {
        type: String,
        label: "ignore this",
        optional: true
    
      },
      dance: {
        type: String,
        optional: true
    
      }
    }));
    
    if (Meteor.isServer) {
      Samurais.allow({
        insert: function (userId, doc) {
          return true;
        },
    
        update: function (userId, doc, fieldNames, modifier) {
          return true;
        },
    
        remove: function (userId, doc) {
          return true;
        }
      });
    }