Hier ist das Kind Komponente:
Vue.component("training-edit", {
template: "#training-edit-template",
props: ["show"],
data: function() {
return {
form: new Form(),
isWorking: false
}
},
watch: {
show: function (val) {
if (val) {
$("#editTrainingModal").modal("show");
} else {
$("#editTrainingModal").modal("hide");
}
}
},
methods: {
onCancel: function() {
this.$emit("doneEditing");
}
}
});
Hier ist die Mutter:
new Vue({
el: "#trainingEditContainer",
data: {
isWorking: false,
showEditTraining: false
},
methods: {
onEdit: function (e) {
e.preventDefault();
this.showEditTraining = true;
},
doneEditing: function() {
this.showEditTraining = false;
}
}
});
HTML:
<div id="trainingEditContainer" class="row">
// unrelated stuff here
<training-edit v-bind:show="showEditTraining"></training-edit>
</div>
<script id="training-edit-template" type="x-template">
<modal-right modalId="editTrainingModal">
<div class="modal-header">
<button type="button" class="close" v-on:click="onCancel" aria-label="close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">Edit Training</h4>
</div>
@Html.Partial("Partial/_EditPartial")
</modal-right>
</script>
Ich sehe in kann die Vue-Entwicklertools in Chrome, in denen das Ereignis ausgegeben wird, aber aus irgendeinem Grund, das Elternteil hört es nicht und die doneEditing
Funktion wird nie aufgerufen. Fehle ich etwas Offensichtliches hier?
@Bert Das Elternteil hat keine Vorlage, aber das Kind tut, also habe ich das zum OP hinzugefügt. Hoffentlich hilft das? – Quiver
Es tut es. Was versuchst du zu "sehen"? Watch sollte ein Objekt sein. Darüber hinaus scheint das Hauptproblem darin zu bestehen, dass Sie niemals einen Listener für das Ereignis "doneEditing" einrichten. – Bert
@Bert Whoops, ich habe den "Uhr" -Teil korrigiert, das war nur ein Tippfehler beim Posten hier. Wie gehe ich auf die Veranstaltung zu? Ich dachte, die Eltern würden immer zuhören, aber ich bin noch relativ neu in 'Vue', also könnte ich leicht falsch liegen. – Quiver