私はバックボーンに少し慣れていないため、以下のコードでは、RequireJS を使用しAceModel
てロードするときにコンストラクターを呼び出すことができません。AceView
つまり、AceView
内のコールバック関数でパラメーター パスを削除すると、snap.js
呼び出しnew AceModel()
て機能しますがAceView
、コンストラクターがエラーで失敗しますTypeError: Cannot call method 'get' of undefined
。
何が起きてる?
ビュー/snap.js
define([
'jquery',
'underscore',
'backbone',
'models/Panel',
'models/ace',
'views/ace',
'views/panel'
], function ($, _, Backbone, Panel, AceView, AceModel, PanelView) {
'use strict';
var SnapView = Backbone.View.extend({
initialize: function () {
this.el = '#snap';
this.$el = $(this.el);
this.$elLoadSbml = this.$el.children().find('div#loadSbml');
this.loadSbmlView = new AceView({
el: this.$elLoadSbml[0],
model: new AceModel({mode: 'monokai'})
});
},
});
return SnapView;
});
ビュー/ace.js
define([
'jquery',
'underscore',
'backbone'
],
function($, _, Backbone) {
'use strict';
var AceView = Backbone.View.extend({
initialize: function () {
this.editor = ace.edit(this.el);
this.editor.setTheme("ace/theme/" + this.model.get('theme'));
this.editor.getSession().setMode("ace/mode/" + this.model.get('mode'));
this.render();
},
render: function () {
$(this.el).height(this.model.get('height'));
$(this.el).width(this.model.get('width'));
this.editor.resize();
}
});
return AceView;
});
models/ace.js
define([
'jquery',
'underscore',
'backbone'
], function ($, _, Backbone) {
'use strict';
var AceModel = Backbone.Model.extend({
defaults: {
height: 800,
width: 400,
theme: 'github',
mode: 'xml'
}
});
return AceModel;
});