2013-06-11 8 views
0

MenuView.jsBackbone значение вида пропуска другого вида

events: { 
    "click ul li": "MenuClick" 
}, 
MenuClick: function (e) { 
    var elm = e.currentTarget; 
    return elm.firstChild.innerText; 
}, 

ModuleView.js

ModuleView = Backbone.View.extend({ 
    initialize: function() { 
     var moduleDt = new ModuleCol(); 
     moduleDt.fetch({ 
      data: JSON.stringify({ Code: "Pass to here" }), 
      dataType: "json", 
      type: 'POST', 
      contentType: "application/json; charset=UTF-8" 
     }); 
    }, 

Код должны работать как при нажатии уль Ли, я получить значение от литий и перейдите к модулю Module.js, чтобы продолжить выборку магистральной сети, но у меня нет идеи о том, как это сделать, у меня был поиск по некоторой ссылке, но по-прежнему не могу понять, правильно ли это сделать Это?

Update1:

Посмотреть/MenuView.js

define(['underscore', 'backbone', '../Collection/MenuCol'], function (_, Backbone, MenuCol) { 

var MenuView = Backbone.View.extend({ 
    initialize: function() { 
     //var vent = _.extend({}, Backbone.Events); 
     var mnCol = new MenuCol(); 
     mnCol.fetch({ 
      type: 'POST', 
      contentType: "application/json; charset=UTF-8", 
      success: _.bind(this.AppendMenu, this), 
     }); 
    }, 
    AppendMenu: function (msg) { 
     var feed = JSON.parse(JSON.stringify(msg)); 
     //var title = _.pluck(_.flatten(feed[0]), "Title"); 

     _.each(_.flatten(feed[0]), function (data) { 
      this.$('ul').append('<li class="inactive"><p class="none">' + data.Code + '</p><a>' + data.Title + ' </a></li>'); 
     }); 
    }, 
    events: { 
     "click ul li": "MenuClick" 
    }, 
    MenuClick: function (e) { 
     var elm = e.currentTarget 
     console.log(elm.firstChild.innerText); 
     this.trigger('itemChoose', elm.firstChild.innerText); 
    }, 
}); 
    return MenuView; 
}); 

Посмотреть/ModuleView.js

define(['underscore', 'backbone', 'datatables', '../Collection/ModuleCol', '../View/MenuView'], function (_, Backbone, dataTable, ModuleCol, MenuView) { 

var ModuleView = Backbone.View.extend({ 
    initialize: function() { 
     //MenuView.vent.on('itmChoose'); 
     MenuView.on('itemChoose', function (item_value) { }); 
     var mdCol = new ModuleCol(); 
     mdCol.fetch({ 
      data: JSON.stringify({ Code: "" }), 
      type: 'POST', 
      contentType: "application/json; charset=UTF-8", 
      success: _.bind(this.AppendModule, this), 
     }); 
    }, 
    AppendModule: function (msg) { 
     var feed = JSON.parse(JSON.stringify(msg)); 

     $('table[id$=gvMenu]').dataTable({ 
      "bAutoWidth": false, 
      "aoColumns": [ 
      { "sWidth": "10%" }, 
      { "sWidth": "90%" }, 
      ], 
      "bFilter": false, 
      "bInfo": false, 
      "bLengthChange": false, 
      "bSort": false, 
      "bPaginate": false, 
      "aLengthMenu": [ 
       [25, 50, 100, 200, -1], 
       [25, 50, 100, 200, "All"] 
      ], 
      "iDisplayLength": -1, 
      "aoColumns": [ 
      { 
       "sTitle": "Code", "mDataProp": "Title", 
      }, 
      { 
       "sTitle": "Description", "mDataProp": "Description", 
      }], 
      sAjaxSource: "", 
      sAjaxDataProp: "", 
      fnServerData: function (sSource, aoData, fnCallback) { 
       //console.log(feed.d); 
       //fnCallback(feed.d); 
      }, 
     }); 
    } 
}); 

//MenuView.on('itmChoose', function (item_value) { }); 

    return ModuleView; 
}); 

master.js

require(['jquery', '../JScripts/View/MenuView', '../JScripts/View/ModuleView'], function ($, menu, module) { 
    $(document).ready(function() { 
     new menu({ el: $('#sidebar') }); 
     new module({}); 
    }); 
}); 

Это мой код, но все же, правильно ли это код? Я провел ночь, чтобы разобраться, но он все еще говорит, что это не определено.

Когда я нажимаю, я получаю значение li и перехожу к module.js в данные ajax, чтобы создать datatable.

Я продолжаю ломать его и посмотреть, если я могу сделать это сегодня во время ожидания своего гида :) спасибо

ответ

1

Согласно вашему обновлению, вы должны предоставить экземпляр MenuView для ModuleView экземпляра :

master.js:

require(['jquery', '../JScripts/View/MenuView', '../JScripts/View/ModuleView'], function ($, menu, module) { 
    $(document).ready(function() { 
    var menuInstance = new menu({ el: $('#sidebar') }); 
    new module({menu: menuInstance}); 
    }); 
}); 

ModuleView.js:

var ModuleView = Backbone.View.extend({ 
    initialize: function (options) { 
    //MenuView.vent.on('itmChoose'); 
    options.menu.on('itemChoose', function (item_value) { }); 
    var mdCol = new ModuleCol(); 
    mdCol.fetch({ 
     data: JSON.stringify({ Code: "" }), 
     type: 'POST', 
     contentType: "application/json; charset=UTF-8", 
     success: _.bind(this.AppendModule, this), 
    }); 
    }, 
+0

, как вызвать его при нажатии li на moduleView.js? Если я инициализирую инициализацию, он не будет меняться при нажатии на кнопку, но только запускает ее при загрузке? или, может быть, я перемещаю событие li, чтобы щелкнуть на moduleView.js вместо menuView.js? – Se0ng11

+1

Вы запускаете на li щелчок в menuView, затем menuView trigger event 'itemChoose', мы поймаем это событие в ModuleView, потому что мы подписываемся на него в методе initialize() –

+0

Хорошо, эта работа превосходна, спасибо за руководство, которое вы предоставляете – Se0ng11

1

Если ModuleView и MenuView являются равноправными компонентами системы - выбрать в вашем коде некоторые центральный компонент (например, потомок Backbone.Router) и осуществлять связь через него. Если ваши взгляды Арен `равные компонент (например, ModuleView агрегаты MenuView), вы можете подписаться на какое-то событие из MenuView в ModuleView и передать значение:

//in ModuleView 
    menuView.on('itemChoosen', function(item_value) { .... }); 

    //in MenuView 
    MenuClick: function (e) { 
     var elm = e.currentTarget; 
     this.trigger('itemChoosen', elm.firstChild.innerText); 
    }, 
+0

ОК, я получаю идею использовать триггер, спасибо за помощь – Se0ng11

+0

как работает this.trigger? кажется, что он не работает – Se0ng11

+0

В моем коде, я полагаю, что 'this' является экземпляром MenuView, так что позаботьтесь об этом. Если у вас есть некоторые проблемы, обновите свой пост с помощью большего количества кода, так что это поможет мне разобраться в ситуации –

Смежные вопросы