2014-10-17 2 views
0

Я пытаюсь записать два вида входа в систему просмотра и регистрации, каждый из которых отображает те же данные, которые собираются из события keyup dom в обоих представлениях. В шаблоне Login меньше поля данных, поэтому меньше переменных шаблона, чем шаблон регистра.Использование одного и того же экземпляра объекта из нескольких разных представлений Backbone/Require

Итак, я подумал о том, чтобы использовать одну модель для визуализации gui из этих двух моделей данных форм. Я пытаюсь разделить проблемы и не разделять ответственность за свои модули. Теперь необходимо сделать модель данных форм зависимой от одного представления и создать в этом представлении и упомянуть этот же экземпляр от другого, сделав прежнее представление зависимым от этого другого представления. Тем не менее этот последний должен использовать тот же экземпляр представления, который он имеет как зависимость. Кажется, что только один вид и три отдельные модели формируют данные, логин и регистрацию, а два разных шаблона могут быть решением.

Это кажется удивительным. В объектно-ориентированной парадигме кажется, что добавление небольшой функции делает ее очень громоздкой, что противоречит идеям объектной ориентации. Вся эта функция предназначена для того, когда пользователь нажимает кнопку регистрации в окне входа в систему, отображая представление в виде списка с только что введенными данными и наоборот.

Это использование, ссылаясь на один вид/модель из другого на использование его моделей и т. Д., Является неправильным использованием Магистрали или Требований, в то время как они предназначены для использования хороших методов развития, таких как разделение проблем, и разделение модуляции, или что совсем не плохо в отношении этих хороших методов?

+0

Не могли бы вы прояснить свой вопрос? Вы говорите: «Это неправильное использование Магистрали или Требование, или это не плохо ...», но мне непонятно, что вы подразумеваете под «этим». – machineghost

ответ

1

Я не думаю, что это «неправильно» за сказать, чтобы View1 зависят от View2, так что View1 может получить доступ к Model, что View2 создает ... но я думаю, что это неоптимальной. Я могу подумать о двух других стратегиях, которые вы, возможно, захотите рассмотреть, которые позволят вам избежать того, чтобы View1 зависел от View2.

Во-первых, вы можете выбрать, чтобы не создавать Model в View2, и вместо того, чтобы просто заполнить его в View2 ... и создать его заранее в своем собственном модуле. Другими словами:

// theLoginData.js 
define(['LoginData'], function(LoginData) { 
    return new LoginData(); 
}); 

// View #2 
define(['theLoginData'], function(theLoginData) { 
    return Backbone.View.extend({ 
     someMethod: function() { 
      theLoginData.set(whatever); 
     } 
    }); 
}); 

// View #1 
define(['theLoginData'], function(theLoginData) { 
    return Backbone.View.extend({ 
     someOtherMethod: function() { 
      var whatever = theLoginData.get('whatever'); 
     } 
    }); 
}); 

Другой вариант был бы еще создать Model в View2, но «зарегистрировать» его в более глобальном масштабе (например, как статическое свойство на Model класса вы используете для входа в систему. данные Model):

// LoginData.js (ie. the Model class for your login data) 
define([], function() { 
    return Backbone.Model.extend({}, { 
     currentLoginData: null 
    }); 
}); 


// View #2 
define(['LoginData'], function(LoginData) { 
    return Backbone.View.extend({ 
     someMethod: function() { 
      LoginData.currentLoginData = new LoginData(whatever); 
     } 
    }); 
}); 

// View #1 
define(['LoginData'], function(LoginData) { 
    return Backbone.View.extend({ 
     someOtherMethod: function() { 
      var whatever = LoginData.currentLoginData.get('whatever'); 
     } 
    }); 
}); 
+0

Я постараюсь понять и адаптировать первое предлагаемое вами решение. Но теперь позвольте мне рассказать, что я понимаю. Поскольку модуль 'yourModel' сам создает экземпляр сам по себе, этот экземпляр доступен из обоих представлений, если я передаю их в этом модуле, следовательно, экземпляр его, как их зависимость. Поэтому я могу получить то, о чем прошу; тот же экземпляр модели с разных точек зрения. –

+0

Исправить. 'Model' создается при * load * времени, и ваш' View 'будет ссылаться только на * run * time (т. Е. Ссылается на него из методов' View', а не на верхнем уровне непосредственно в модуле), поэтому у них всегда может быть доступный для них «Модель». – machineghost

+0

Вы имеете в виду этот экземпляр «Модели», доступный для них. –