我是骨干js的新手,我无法通过视图加载js文件。
我正在使用Symfony2并处理别人的代码。
我的html视图和主干文件非常简单。
在我看来:
<div id="accountManager" class="user-edit-form">
<div class="user-edit-form">
<div class="button-set">
{{ form_widget(form.save, { 'attr': {'class': 'button-primary button-save'} }) }}
</div>
</div>
</div>
在我的骨干视图中:
define([
'jquery',
'underscore',
'backbone',
'spinner'
], function( $, _, Backbone, Spinner) {
var accountView = Backbone.View.extend({
el: '#accountManager .user-edit-form',
events: {
'click .button-save': 'updateUser'
},
initialize: function () {
console.log("I AM LOADED");
this.$formHolder = this.$('.user-edit-form');
this.$loadingHolder = this.$('.user-edit-form .loading-mask');
},
render: function () {
return this;
},
updateUser: function (event) {
event.preventDefault();
console.log('clicked');
alert("clicked");
return false;
}
});
return accountView;
});
当我运行相关命令时,Assetic将所有js文件合并为一个,因此此代码应与任何加载的html一起出现。我是否需要告诉symfony在某处加载此文件,还是应该监听#accountManager
元素出现?
答案 0 :(得分:0)
原来该应用正在使用router。希望这可以帮助某人在将来遇到同样的问题。
它的代码如下所示:
define([
'jquery',
'underscore',
'backbone',
'vm'
], function ($, _, Backbone, Vm) {
var AppRouter = Backbone.Router.extend({
instance: null
});
var initialize = function ( options ) {
var appView = options.appView;
var router = new AppRouter(options);
if ($('#accountManager').length > 0) {
require(['views/admin/AccountManager'], function (AccountManagerView) {
var accountManagerView = Vm.create(appView, 'AccountManagerView', AccountManagerView);
accountManagerView.render();
});
}
// Lots of other view ifs
AppRouter.instance = router;
Backbone.emulateJSON = false;
Backbone.history.start({
root: returnRoot(),
pushState: 'pushState' in window.history
// the server is handling the initial route and rendering your deep link
});
};
var returnRoot = function () {
var pathname = window.location.pathname;
var pieces = pathname.split('/');
if (pathname.indexOf('app_dev.php') > -1) {
return pieces[0];
}
else {
return '';
}
};
return {
initialize: initialize,
AppRouter: AppRouter
};
});