Я борюсь с тем, когда нужно разрушать представления о скелетах. Я знаю, что мне нужно что-то разрушить, но я не знаю, где.
У меня есть следующий код в router.jsМагистральная архитектура и управление представлением
routes: {
"names/search": "nameSearch",
"companies/search": "companySearch"
},
initialize: function(){
Backbone.history.start();
this.navigate("#/", true);
}
nameSearch: function() {
require(["app/views/RecordSearch"], function (RecordSearchView) {
var obj = {};
obj.Status = [utils.xlate("On Assignment"), utils.xlate("Candidate")];
var view = new RecordSearchView({ model: obj, el: $(".content") }, { "modelName": "Candidate" });
view.delegateEvents();
});
},
companySearch: function() {
require(["app/views/RecordSearch"], function (RecordSearchView) {
var view = new RecordSearchView({ model: {}, el: $(".content") }, { "modelName": "Company" });
view.delegateEvents();
});
}
А потом в RecordSearchView.js У меня есть следующая функция, которая вызывается, когда пользователь нажимает на кнопку поиска
doSearch: function() {
require(["app/utils/SearchHelper", "app/models/" + modelName, "app/views/SearchResults"], function (SearchHelper, Model, SearchResultsView) {
var obj = $("#searchForm").serializeArray();
var params = SearchHelper.getQuery(obj);
params["page"] = 1;
params["resultsPerPage"] = 25;
var collection = new Model[modelName + "Collection"]({}, { searchParams: params });
params["Fields"] = collection.getSearchFields();
collection.getPage(params["page"], function (data) {
require(["app/views/SearchResults"], function (SearchResultsView) {
App.Router.navigate(modelName + "/search/results");
var view = new SearchResultsView({ collection: data, el: $(".content") });
view.delegateEvents();
});
});
return false;
});
И SearchResults.js
return BaseView.extend({
init: function() {
this.render();
},
render: function() {
var data = this.collection.convertToSearchResults();
this.$el.html(template(data));
return this;
}
});
проблема заключается в второй раз, когда я выполнить любой поиск (вызов функции doSearch от RecordSearch.js). Как только я выполняю второй поиск, отображаются данные, принадлежащие предыдущему поиску, который я выполнил. (Например, я выполняю поиск по имени, и он работает, затем выполняйте поиск компании, но на экране отображаются результаты поиска компании, но затем быстро заменяется результатами поиска по имени). Мои вопросы
Я подозреваю, что нужно вызвать некоторый код очистки на представлении до его повторного использования. Где это место в базовом приложении для запуска этого приложения.
Есть ли что-то не так с тем, как я загружаю SearchResults из вида RecordSearch? SearchResults не имеет пути на моем маршрутизаторе, но в основном это сообщение формы, поэтому я предполагаю, что это не так?
Любая помощь приветствуется.
Вы правы, что вам следует обрабатывать жизненные циклы просмотра, но, учитывая вашу настройку, это не кажется вашей проблемой. Вы выполняете 'this. $ El.html()' между представлением рендеринга, поэтому старые представления не должны появляться повторно. Копать немного глубже, как перейти от результата поиска к новому поиску? – seebiscuit
У вас есть несколько элементов на странице с классом контента? Кажется странным, что * все * получает визуализацию в том же элементе «.conent». – seebiscuit
@Печа, спасибо, я понимаю, что вы имеете в виду.Я не понимал, как базовый контент передается в элемент представления. Это было проблемой в моем коде, но главной проблемой была проблема с зомби-представлением, предложенная ниже. – Ronnie