複数のフォームをいくつか用意しています。私の上司は、フォームを無効にし、ロック/アンロックボタンを持つ方法を見つけるように私に求めました。したがって、ユーザーはフォームに移動し、ロックを解除して変更を加え、フォームをロックまたは保存します。主な問題は、すべての入力(おそらく数百)に "disabled = true"をハードコーディングせずにこれを行う方法を見つけることです。Ember:ハードコードなしでページを読み込んでフォームをロックする "無効"
私は道の90%です。私はtoggleLockアクションを働かせています。同じルート内で別のモデルに移行しても、フォームはロックされます。問題は、ページが最初にロードされたとき、またはページがリフレッシュされたときにフォームがロックされないことです。
ここでは、コードです:https://github.com/djbreen7/ember-sandbox
アプリ/テンプレート/食事/ view.hbs
<form class="edit-form">
<div class="form-group">
<label for="exampleInputEmail1">Meal Name</label>
{{input type="text" class="form-control" id="" placeholder="" value=model.name}}
</div>
...
<button id="toggle-lock" type="button" class="btn btn-default" {{action 'toggleLock'}}>Unlock</button>
</form>
アプリ/路線/食事/ view.js
import Ember from 'ember';
export default Ember.Route.extend({
beforeModel(controller) {
if (!this.get('isLocked')) {
controller.send('toggleLock');
}
},
model(params, controller) {
if (!this.get('isLocked')) {
console.log('attempting to lock due to transition');
controller.send('toggleLock');
}
return this.modelFor('meals').findBy('id', parseInt(params.meal_id));
},
isLocked: false,
lockForm: function() {
if (this.get('isLocked')) {
Ember.$('.edit-form').find('input').prop('disabled', true);
Ember.$('#toggle-lock').text('Unlock');
} else {
Ember.$('.edit-form').find('input').prop('disabled', false);
Ember.$('#toggle-lock').text('Lock');
}
}.observes('isLocked'),
actions: {
toggleLock: function() {
if (this.get('isLocked')) {
console.log('unlocking');
this.set('isLocked', false);
} else {
console.log('locking');
this.set('isLocked', true);
}
}
}
});
:利用可能な
ありがとうございます。私はこれが解決策であるかもしれないと恐れている。私は 'disabled = isLocked'を追加するために何百行ものコードを実行することなくそれを行う方法を見つけようとしていますが、それは唯一の方法だと思われます。それ以上の回答が表示されているかどうかを確認します。これは非常に良い説明です。もし私が担当者にupvoteをさせたら、私はそうするでしょう。 –
私はすべてのフォームを調整しなくても、これを動作させることができました。私はもっと分かち合いたいと思うが、私の上司はコンポーネントを書いていた。つまり、基本的に 'disabled'属性がコンポーネントに存在します。無効にするフォームは、コンポーネントをラップします。次に、あなたの提案に従うことは完全に機能し、コンポーネント内に 'disabled = isLocked'を持つだけです。 –