2014-05-13 39 views
0

我有一个名为docTemplateID的变量/动作。 docTemplateID可以具有1或2个 点击按钮1套docTemplateID = 1 的值点击提交按钮将创建docTemplateID的实例与它的新值Emberjs - 我需要一个会改变变量值的动作

<form {{action "addDoc" on="submit"}} id="addDoc" name="addDoc"> 
    <div> 
    <button value="1"> 1 </button> //sets docTemplateID to 1 
    <button value="2"> 2 </button> //sets docTemplateID to 2 
    </div> 
    <button type="submit" class="submit"> Add</button> //Submits docTemplateID after it is chosen. 
</form> 

选择任何按钮的按钮提交。

VpcYeoman.Doc = DS.Model.extend({ 
    docTemplateID: DS.attr('number'), //this is what can be set to a value of 1 or 2 
}); 

'addDoc'动作定义如下。

VpcYeoman.DocsController = Ember.ArrayController.extend({ 
    actions: { 
    addDoc: function (params) { 
     var docTemplateID = this.get('docTemplateID'); 
     var store = this.store; 
     var current_object = this; 
     var doc = current_object.store.createRecord('doc', { 
     docTemplateID:docTemplateID 
     }); 
     doc.save(); 
     return true; 
    }, 

    } 
}); 

而文档路由

VpcYeoman.DocsRoute = Ember.Route.extend(VpcYeoman.Authenticated,{ 
    model: function() { 
     return this.store.find('doc'); 
    } 
}); 

回答

1

除非有东西在你的路线,这是我无法看到的,它看起来像问题是,一,你是不是呼吁采取任何行动单击时设置docId的按钮。问题#2是你的控制器还没有一个名为docTemplateId的属性。为了让您的控制器承担您的模型的属性,您需要将它传递给该模型的一个实例。如果您在DocRoute中通过createRecord作为模型,则该值将是可修改的。

下面是我用来使您的示例工作的代码,至少在保存该记录之后,因为我没有后端。

的jsbin位于here

App = Ember.Application.create(); 

App.ApplicationAdatper = DS.FixtureAdapter.extend({}); 

App.Router.map(function() { 
    // put your routes here 
}); 

App.IndexRoute = Ember.Route.extend({ 

}); 

App.IndexController = Ember.ArrayController.extend({ 
    tempDocId: null, 
    actions: { 
    addDoc: function (params) { 
     console.log(this.get('tempDocId')); 
     var docTemplateID = this.get('tempDocId'); 
     var store = this.store; 
     var current_object = this; 
     var doc = current_object.store.createRecord('doc', { 
     docTemplateID:docTemplateID 
     }); 
     doc.save(); 
     return true; 
    }, 
    setDocId: function (param) { 
     this.set('tempDocId', param); 
     console.log(this.get('tempDocId')) 
    } 
    } 
}); 

App.Doc = DS.Model.extend({ 
    docTemplateID: DS.attr('number') 
}); 

而且模板:

<script type="text/x-handlebars" data-template-name="index"> 
    <form {{action "addDoc" on="submit"}} id="addDoc" name="addDoc"> 
     <div> 
     <button value="1" {{action 'setDocId' 1}}> 1 </button> 
     <button value="2" {{action 'setDocId' 2}}> 2 </button> 
     </div> 
     <button type="submit" class="submit"> Add</button> 
    </form> 
</script> 

我希望这有助于!

+0

我将路由添加到OP。这个解决方案确实工作:)。如果我想默认值为1,我会在索引控制器中设置tempDocId:1。 docTemplateID只保存在本地存储上,但这对于其他帖子来说是个问题。 –

+1

是的,如果你想将其默认为tempDocId,你可以初始化tempDocId。 – bmeyers