Backbone无法加载

时间:2014-11-14 12:29:17

标签: symfony backbone.js

我是骨干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元素出现?

1 个答案:

答案 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
    };

});