2016-11-30 73 views
0

這看起來非常瑣碎,我覺得很尷尬,但我似乎無法在保存當前後創建新模型。Emberjs在保存後創建新模型

想想待辦事項應用程序,要不斷添加新的任務:

我有一個可以正確保存,但不以新的模式

model() { 
    return RSVP.hash({ 
     distro: get(this, 'store').createRecord('distro'), 
    }); 
    }, 

    setupController(controller, models) { 
    controller.setProperties(models); 
    }, 

    actions: { 
    saveDistro(distro) { 
     let newDistro = get(this, 'store').createRecord('distro'); 

     distro.save().then(() => { 
     set(this, 'distro', newDistro); 
     }); 
    }, 
    } 

我更新前端一個很簡單的路線認爲我在這裏只是錯過了明顯的?

+0

你的意思是「似乎無法創造」? – Serge

回答

0

您正在創建2個不同的distros此處。第一個是傳遞給你的控制器顯示的,第二個是在動作saveDistro()中創建的。

通常,您不希望在model()鉤子中創建新記錄。這是爲了查找數據。因爲我不知道你在你的控制器做什麼,並查看與第一個發行版,我不能對此發表意見,但我建議是這樣的:

編輯:

// Controller 
init() { 
    this._super(...arguments) 
    this.set('formAttrs', { 
    attr1: null, 
    attr2: null 
    // ... 
    }) 
}, 

actions: { 
    saveDistro() { 
    const attrs = this.get('formAttrs') 
    this.send('saveDistro', attrs) 
    } 
} 

// Model 
actions: { 
    saveDistro(attrs) { 
    let newDistro = get(this, 'store').createRecord('distro', attrs); 

    distro.save().then(() => { 
     // transition to new distro route 
    }); 
    } 
} 
+0

感謝您的迴應,這是一個簡單的「創建新的」路線,所以我不認爲我想獲取目前所有的發行版嗎?但是我需要一個表單來保存數據,因此在模型鉤子 –

+0

上創建它。您不需要一個模型來構建表單來保存數據。事實上,我敦促你不要那樣做。相反,在你的控制器中,創建一個表單attrs對象來保存這些值,然後使用這些值在動作中創建新的「發行版」 – xcskier56

+0

我已更新答案以反映我正在談論的內容 – xcskier56