流星,创建更新表单和填充字段

时间:2017-09-28 10:56:06

标签: meteor meteor-blaze meteor-autoform quickform

我有以下结构:

{
    id: 23423-dsfsdf-32423,
    name: Proj1,
    services: [
     {
        id:sdfs-24423-sdf,
        name:P1_Service1,
        products:[{},{},{}]
     },
     {
        id:sdfs-24jhh-sdf,
        name:P1_Service2,
        products:[{},{},{}]
     },
     {
        id:sdfs-2jnbn3-sdf,
        name:P1_Service3,
        products:[{},{},{}]
     }
    ]
},
{
    id: 23423-cxcvx-32423,
    name: Proj2,
    services: [
     {
        id:sdfs-xvxcv-sdf,
        name:P2_Service1,
        characteristics:[{},{},{}]
     },
     {
        id:sdfs-xvwqw-sdf,
        name:P2_Service2,
        characteristics:[{},{},{}]
     },
     {
        id:sdfs-erdfd-sdf,
        name:P2_Service3,
        characteristics:[{},{},{}]
     }
    ]
}

使用quickForm创建表单此表单和插入表单没有问题。 但我无法弄清楚(并尝试阅读每个教程和指令,没有任何工作)如何创建一个填充所有字段的更新表单(还需要扩展和填充服务和特征数组:

enter image description here

当然,正如我所说,在更新中我需要将服务和特性扩展到所有领域的正确尺寸。 但如果我能理解如何填写表单字段,我就能理解自己如何花费数组......

我试过了:

         {{> quickForm collection="Projects" id="updateProjectForm" collection="Projects" type="method" class="update-project-form" doc=project }} 

使用:

import SimpleSchema from 'simpl-schema';
import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';

// Attaching the subscription to the template so we can reuse it
Template.ProjectSingle.onCreated(function(){
    var self = this;
    self.autorun(function(){
        var id = FlowRouter.getParam('id');
        self.subscribe('projectSingle', id);
    });
});

Template.ProjectSingle.helpers({
    project: ()=> {
        var id = FlowRouter.getParam('id');
        console.log(Projects.findOne({_id: id}));
        return Projects.findOne({_id: id});
    }
});

我甚至无法看到console.log()打印。

此列表中的解决方案并未使流星服务器崩溃......我尝试过的其他所有内容都会因许多错误而崩溃服务器

也许我需要提一下,我使用了部分内容,所以也许JS文件存在问题,但我并不这么认为是正在读取onCreated方法。

10倍。

编辑:

我已删除更新模板的部分内容,现在它位于根模板中,并带有自己的JS,方法如下:

projectDoc: ()=> {
    var id = FlowRouter.getParam('id');
    console.log("Update: " + Projects.findOne({_id: id}));
    return Projects.findOne({_id: id});
}

现在我可以看到正在调用此方法,但由于某种原因,它被调用了两次。首先使用正确的数据,然后得到未定义的,所以我仍然没有得到任何字段,但如果我能找到为什么它被调用两次,我将解决第一级表单(没有服务等等)

1 个答案:

答案 0 :(得分:0)

解决了它(不确定这是最好的方法,因为我仍然有两次调用方法,但现在这样做了:

projectDoc: ()=> {
    var id = FlowRouter.getParam('id');
    if(Projects.findOne({_id: id}) != null){
        console.log(Projects.findOne({_id: id}));
        thisProject = Projects.findOne({_id: id});
        return Projects.findOne({_id: id});
    } else {
        return thisProject;
    }
}