하위보기가 여러 개인 백본에서보기가 있습니다. 하위보기의 이벤트가 실행되지 않으며 이유를 이해하는 데 문제가 있습니다.백본 서브 뷰 이벤트가 실행되지 않습니다.
var TaskView = Backbone.View.extend({
tagName: "div",
template: _.template($("#taskAddTemplate").html()),
render: function() {
// append the template to the element
this.$el.append(this.template);
var scheduleData = new ScheduleModel(this.model.attributes.Schedule);
this.Schedule = new ScheduleView({ model: scheduleData });
this.assign(this.Schedule, "#ScheduleDetails");
return this;
},
assign: function(view, selector) {
view.setElement(this.$(selector)).render();
},
events: {
"submit #NewTaskForm": function (e) {
e.preventDefault();
$("#SaveTaskButton").effect("pulsate", { times: 0 }, 0);
console.log("In submit for task");
}
}
});
var ScheduleView = Backbone.View.extend({
tagName: "div",
template: _.template($("#scheduleAddTemplate").html()),
render: function() {
// append the template to the element
this.$el.append(this.template(this.model.toJSON()));
// set the schedule type
var renderedInterval = SetScheduleType(this.model);
// append to the interval
$("#Interval", this.$el).append(renderedInterval.el);
return this;
},
events: {
"submit #NewTaskForm": function (e) {
e.preventDefault();
console.log("In submit for schedule");
}
}
});
의 의견이 제대로 표시되지만 때마다 다음
https://ianstormtaylor.com/rendering-views-in-backbonejs-isnt-always-simple
코드의 관련 부분이다 : 나는 어떻게 화재에 서브 뷰의 이벤트를 얻는 방법을 보여주는 자습서를 다음 봤는데 NewTaskForm id로 제출 단추를 클릭합니다. 일정보기에는 표시되지 않지만 일정보기에는 이벤트가 발생합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
편집 : 다음
은 템플릿 :
<script id="taskAddTemplate" type="text/html">
<nav class="navbar navbar-default" id="TaskMenu">
<ul class="nav navbar-nav" id="TaskTabs">
<li role="presentation"><a href="#TaskDetails" aria-controls="Task Details" role="tab" data-toggle="tab">Task Details</a></li>
<li role="presentation"><a href="#ScheduleDetails" aria-controls="Schedule Details" role="tab" data-toggle="tab">Schedule Details</a></li>
</ul>
</nav>
<form class="form form-horizontal" id="NewTaskForm">
<div class="tab-content">
<div role="tabpanel" class="tab-pane" id="TaskDetails">
<div class="form-group">
<label class="col-xs-2 control-label">Task Name: </label>
<input class="col-xs-10 form-control" type="text" id="TaskName" name="TaskName" />
</div>
<div class="form-group">
<label class="col-xs-2 control-label">Message: </label>
<textarea class="col-xs-10 form-control" rows="5" type="text" id="Message" name="Message"></textarea>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="ScheduleDetails"></div>
<div class="form-group">
<div class="container">
<div class="col-xs-2">
<input type="submit" class="form-control btn btn-primary col-xs-2" id="SaveTaskButton" />
</div>
<div class="col-xs-2">
<input type="button" class="form-control btn btn-danger col-xs-2" id="CancelNewTaskButton" value="Cancel" />
</div>
</div>
</div>
</div>
</form>
</script>
<script id="scheduleAddTemplate" type="text/html">
<div id="Schedule" class="form-group">
<div class="row">
<div class="col-xs-3">
<span class="col-xs-1"></span>
<select class="form-control" id="ScheduleType" data-val="true" data-val-required="The Schedule Type Field is require.">
<option value="hourly">Hourly</option>
<option value="daily">Daily</option>
<option value="weekly">Weekly</option>
<option value="monthly">Monthly</option>
</select>
</div>
<div id="Interval" class="col-xs-9"></div>
</div>
<div id="StartAndEnd" class="row">
<label class="control-label col-xs-1">Start</label>
<input type="text" class="date form-control col-xs-2" id="StartDate" value="<%= StartDate %>" />
<input type="text" class="time form-control col-xs-1" id="StartTime" value="<%= StartTime %>" />
<label class="control-label col-xs-1">End</label>
<input type="text" class="date form-control col-xs-1" id="EndDate" value="<%= EndDate %>" />
<span class="col-xs-2"></span>
</div>
</div>
</script>
두 템플릿 (taskAddTemplate 및 scheduleAddTemplate)에 #NewTaskForm이 본문에 정의되어 있습니까? – zon7
아니요, taskAddTemplate은 scheduleAddTemplate에서 값을 취하는 양식이있는 "마스터보기"입니다. – Michelle
Ok. 문제는 백본의 이벤트 태그가 내부 HTML에만 영향을 미치므로 동일한 태그에 대한 이벤트가있는 여러 자식을 가질 수 있다는 것입니다. 두 가지보기 모두에서 이벤트가 트리거되도록하려면 이벤트를 전달하거나 구조를 변경해야합니다. – zon7