Backbone JS Кнопка для открытия нового представления, сохранения значений в форме - PullRequest
0 голосов
/ 03 октября 2018

Я новичок в магистральной сети, и я смотрю на очень простую страницу просмотра 2 с использованием магистрали.

У меня есть следующий код:

define(
  ["backbone","...","..."],
    function(Backbone, ... , ... )  {
      var PopupView = Backbone.View.extend({
        initialize: function initialize() {
          Backbone.View.prototype.initialize.apply(this,arguments);
        },

        events: {
          "click .save_conf_button": "save_conf",
        },

        render: function() {
          this.el.innerHTML = this.get_popup_template();
          return this;
        },

        save:conf: function save_conf() {
          //get the field values from popup_template
          //var items = jquery(....);
      });

      var ExampleView = Backbone.View.extend({
        //Starting view
        initialize: function initialize() {
          Backbone.View.prototype.initialize.apply(this, arguments);
        },

        events: {
          "click .setup_button": "trigger_setup", //Triggers final setup
          "click .create_conf_button": "trigger_popup_setup", //This is the conf popup 
        },


        render: function() {
          this.el.innerHTML = this.get_start_html();
          return this;
        },


        trigger_popup_setup: function trigger_popup_setup() {
          console.log("Pop up");
          //this.el.innerHTML = this.get_popup_template();
          PopupView.render();
          ...
        },
      }); //End of exampleView
  return ExampleView;
 } // end of require asynch
); // end of require

Например, ExampleView является стартовымпросмотр с парой полей и 2 кнопками;создать всплывающее окно и сохранить.После нажатия create_conf_button я хочу отобразить всплывающее окно, однако, похоже, это не работает так, как я ожидал.(Uncaught TypeError: PopupView.render is not a function)

Я не уверен, как поступить и, кроме того, какова «лучшая практика» для создания диалогов такого типа?Кроме того, сохранение значений, заполненных на предыдущей странице после возврата из всплывающего окна, было бы предпочтительным.

Спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

@ ashish - это правильно, вы должны создать экземпляр PopupView перед вызовом его метода рендеринга.В настоящее время вы определили план для представления под названием PopupView, которое будет действовать как конструктор для вновь созданных экземпляров представления PopupView.Чтобы использовать это определенное представление, я бы предложил сохранить его в методе рендеринга или инициализации ExampleView:

// Example View's initialize method
initialize: function initialize() {
   this.popUpView = new PopupView();
   Backbone.View.prototype.initialize.apply(this, arguments);

},

, а затем сослаться на него в функции trigger_popup_setup следующим образом:

trigger_popup_setup: function trigger_popup_setup() {
    console.log("Pop up");
    //this.el.innerHTML = this.get_popup_template();
    this.popUpView.render();
    ...
},

Что касается сохранения состояния, для этого используются модели Backbone:)

В общем случае для вложенных подпредставлений в главном представлении в Backbone вы можете сделать следующее:

initialize : function () {
    //...
},

render : function () {

    this.$el.empty();

    this.innerView1 = new Subview({options});
    this.innerView2 = new Subview({options});

    this.$('.inner-view-container')
        .append(this.innerView1.el)
        .append(this.innerView2.el);
}

В этом примере главное представление создает экземпляры своих подпредставлений в своем методе рендеринга и присоединяет их к соответствующему элементу DOM.

0 голосов
/ 03 октября 2018

try

new PopupView.render()

вам нужно создать экземпляр для вызова методов таким образом

...