2014-05-13 51 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