Vue DevToolsの値が正しいところで奇妙な問題が発生しています。期待どおりのデータで宣言されています。アイテムを「編集」して初めて、ブラウザウィンドウに正しい値が表示されます。Vue DevToolsは正しく更新されますが、ブラウザウィンドウは更新されません。
しかし、「数量の異なるアイテムを編集」をクリックすると、間違っていても同じ値が再度表示されます(データベースからあらかじめ入力する必要があります)。
次に、最初の「編集」項目をもう一度クリックすると、その値は前の値で更新されます!
クレイジーな部分は私のブラウザウィンドウが正しい値を示していない間、正しい結果が常にでVueのデベロッパーツールにまで表示されていることです!下の画像の円で囲んだ項目は、「数量」100のUUIDです。これは正しい値です。それでも700が表示されます(前の編集項目の値)。今までにこれが起こったことがあった人は誰ですか?
ここでは、関連するコードのいくつかのスニペット(それはVUE-リソースを使用してVueのコンポーネントからだし、これはLaravelプロジェクトのブートストラップモーダルで行われている)です。
VueのJS
は、data() {
return {
selected_options: {},
attributes: [],
}
},
methods: {
editLineItem: function (line_item) {
this.getProductOptionsWithAttributes(line_item.product_id);
this.getPrepopulatedOptionsForLineItem(line_item.id);
},
getProductOptionsWithAttributes: function (product_id) {
var local_this = this;
var url = '/api/v1/products/' + product_id + '/options';
this.$http.get(url).then(function (response) {
local_this.attributes.$set(0, response.data);
}, function (response) {
// error handling
});
},
getPrepopulatedOptionsForLineItem: function (id) {
var local_this = this;
var url = '/api/v1/line_items/' + id + '/options';
this.$http.get(url).then(function (response) {
Object.keys(response.data).forEach(function (key) {
Vue.set(local_this.selected_options, key, response.data[key]);
});
}, function (response) {
//@TODO Implement error handling.
});
},
}
HTML
<div v-for="(key, attribute) in attributes[0]" class="col-md-12 selectbox_spacing">
<label for="option_{{$index}}">{{key}}</label><br/>
<select class="chosen-select form-control" v-model="selected_options[key]" v-chosen="selected_options[key]" id="option_{{$index}}">
<option v-for="option in attribute" value="{{option.id}}">{{option.name}}</option>
</select>
</div>
<button v-on:click="editLineItem(line_item)">
Main.js vue-ディレクティブ:edit.blade.phpファイルで
Vue.directive('chosen', {
twoWay: true, // note the two-way binding
bind: function() {
$(this.el)
.change(function(ev) {
// two-way set
//this.set(this.el.value);
var i, len, option, ref;
var values = [];
ref = this.el.selectedOptions;
if(this.el.multiple){
for (i = 0, len = ref.length; i < len; i++) {
option = ref[i];
values.push(option.value)
}
this.set(values);
} else {
this.set(ref[0].value);
}
}.bind(this));
},
update: function(nv, ov) {
// note that we have to notify chosen about update
$(this.el).trigger("chosen:updated");
}
});
var vm = new Vue({
el : '#wrapper',
components: {
LineItemComponent
}
});
スクリプト:デフォルトで
<script>
$(document).ready(function() {
$('#lineItemModal').on('shown.bs.modal', function() {
$('.chosen-select', this).chosen('destroy').chosen();
});
}
</script>
あなたは 'ブートストラップ・SELECT'または類似のような選択のプラグインを使用していますか?その場合は、新しい選択を表示するためにUIを更新するために新しい値をプログラムで設定した後、 '.refresh()'のようなメソッドを呼び出す必要があります。 – DelightedD0D
これを解決するにはもっとコードが必要になるかもしれないと思います。サンプルDBの応答、選択ボックスのコードが役に立ちます。 'data'オプションで利用可能な値を事前に定義することもできます。あなたが 'v-model'でそれを使いたい場合、' Quantity'キーはバットの価値を持っているはずです – Jeff
@Jeffもう少しHTMLを追加しました。数量はvモデルとして使用されません。あなたが見ることができるように、Vue DevToolsのすべての方法が大丈夫なので、DBの応答はうまくいきます。 – user3089840