2015-07-16 7 views
6

Ich habeÄnderungswert der Blindvariable in Haken in Meteor

Template.templateName.onCreated(function() { 
    this.variableName = new ReactiveVar; 
    this.variableName.set(true); 
}); 

und in templateName Ich habe ein autoform. Ich muss die reaktive Variable variableName auf false setzen, wenn der autoform eingereicht wird.

Ich habe

versucht
AutoForm.hooks({ 
    myForm: { 
    onSuccess: function(operation, result) { 
     this.variableName.set(false); 
    }, 
    } 
}); 

, aber es funktioniert nicht, da this. nicht auf die Vorlage templateName beziehen, wie es in Helfer und Veranstaltungen der Fall ist. Es hätte funktioniert, wenn ich stattdessen Sitzungen verwendet hätte, da diese nicht auf bestimmte Vorlagen beschränkt sind.

Was kann ich tun, um die reaktive Variable in einem Autoform-Hook zu ändern?

Ich habe auch versucht,

AutoForm.hooks({ 
    myForm: { 
    onSuccess: function(operation, result) { 
     this.template.variableName.set(false); 
     this.template.parent.variableName.set(false); 
     this.template.parent().variableName.set(false); 
     this.template.parentData.variableName.set(false); 
     this.template.parentData().variableName.set(false); 
     this.template.parentView.variableName.set(false); 
     this.template.parentView().variableName.set(false); 
    }, 
    } 
}); 

Wenn console.log(this.template) mit ihm ein Objekt nicht gedruckt werden. Wenn ich console.log(this.template.data) verwende ich bekommen

Object {id: "myForm", collection: "Meteor.users", type: "update", doc: Object, validation: "submitThenKeyup"…} 

ich die reaktive Variable variableName, um zu bestimmen, ob entweder die editierbare Form zu zeigen, oder die schöne Darstellung der Daten für den Anwender. Vielleicht gibt es einen anderen besseren Weg, dies zu tun.

+0

Ich konfrontiert mit dem gleichen Szenario, aber ich löste es mit 'Session' und' Autorun'. Und 'onDestroyed' von dieser Vorlage mache ich die' Session' als 'null' ... Warte darauf, irgendeinen anderen besseren Weg zu kennen, um das zu lösen ... Thumps Up! – iamhimadri

+0

@Jamgreen, sind die Codes 'Template.TemplateName.onCreated' und' AutoForm.hooks' in der gleichen Datei? –

+2

Haben Sie versucht, 'Template.instance(). VariableName' in Ihrem Hook zu verwenden? – SylvainB

Antwort

1

Bearbeiten von OnCreated:

Template.templateName.onCreated(function() { 
    this.variableName = new ReactiveVar(false); 
}); 

Möglicherweise möchten Sie eine Hilfsfunktion hinzuzufügen, um die Template-Instanz zu greifen:

Template.templateName.helpers({ 
    getVariableName: function() { 
     return Template.instance().variableName.get(); 
    } 
}); 

und dann könnten Sie möglicherweise rufen Sie in Ihrer Form Logik

AutoForm.hooks({ 
    myForm: { 
    onSuccess: function(operation, result) { 
     Template.getVariableName.set(false); 
    }, 
    } 
}); 

Der MeteorChef hat einen tollen Artikel über reaktive Variablen/Wörterbücher Reactive Variables.

0

Wenn die Menschen für eine Lösung auf diese stolpern, basierend this thread ich in der Lage, die Eltern Reactive Dict/Reactive Variable nach aldeed:template-extension wie die Installation für den Zugriff auf so

AutoForm.hooks({                               
    postFormId: { 
    //onSuccess hook of my post form 
    onSuccess: function(formType, result) { 
     this.template.parent().reactiveDictVariable.set('imgId', 'newValueSetOnSuccess'); 
     //Or reactive var, and depending on your hierarchy 
     //this.template.parent().parent().yourReactiveVar.set(undefined); 
    } 
    } 
}); 

Hier ist Html und JS Referenz.

<template name="postsTemplate"> 
    {{#autoForm schema=postFormSchema id="postFormId" type="method" meteormethod="addPost"}} 
    <!-- other autoform stuff --> 
    This is reactive variable used in template -- {{imgId}} 
    {{/autoForm}} 
</template> 


Template.postsTemplate.created = function() { 
    //Using reactive-dict package here                         
    this.reactiveDictVariable = new ReactiveDict(); 
    this.reactiveDictVariable.set('imgId', undefined); 
}; 

Template.posts.events(
    "change .some-class": function(event, template) { 
    //other stuff 
    template.postImgState.set('imgId', 'something'); 
}