Cannot insert relationship ID into Aldeed's Autoform MeteorJS framework

别说谁变了你拦得住时间么 提交于 2019-12-08 09:10:43

问题


New to MeteorJS. I started making a novel Clan/Samurai app to see if I could understand how mongo/meteor and Autoforms handle relationships. I'm trying to make clans and samurai relate to each other so that each Samurai has a specific clan.

I'm attempting to insert the clan data into the Samurai identity. I seem to not be able to.

I've read the following and still seem generally confused on how to implement this. I've tried before, onsuccess, onsubmit hooks. I've attempted to set the schema up so that it works. I mostly get AutoForm undefined or Schema undefined...tons of errors it seems. I've read that it should be client.

I can console log and get it to render but I can't add the new items to the collection.

Random Github made for viewing pleasure

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/collections/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/collections/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;
     }
     });
    }

//client/template/clans/createClan.html

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

  </div>
</template>

//client/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:


I was able to resolve this issue by doing the following.

  1. Return on object using 'before' hook
  2. Router.current().params._id a. I was using iron router and in my url was clans/_id/samurai/new
  3. added 'dance' and 'clanid' as apart of the simpleschema. I had neglected to include them as apart of the schema so I was getting the console.log to work but not the data to be apart of the object.

//client/lib/main.js (alterations)

before: { 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/collections/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;
    }
  });
}


来源:https://stackoverflow.com/questions/31210215/cannot-insert-relationship-id-into-aldeeds-autoform-meteorjs-framework

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!