javascript - एक्स्टजेएस अनुप्रयोग सही ऐप फ़ोल्डर में नहीं देख रहा है




extjs model-view-controller extjs4 (4)

यह पथ मैपिंग सामान्य रूप से कॉन्फ़िगर करने का तरीका है:

Ext.Loader.setConfig({
    enabled: true,
    paths: {
        'AM': 'app'
    }
});

इस ट्यूटोरियल में , कोड है जो पढ़ता है:

Ext.require('Ext.app.Application');

var Application = null;

Ext.onReady(function() {
    Application = Ext.create('Ext.app.Application', {
        name: 'AM',

        controllers: [
            'Users'
        ],

        launch: function() {
            //include the tests in the test.html head
            jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
            jasmine.getEnv().execute();
        }
    });
});

मेरे लिए, यह एक 404 की ओर जाता है जब एप्लिकेशन एप्लिकेशन कोड की तलाश कर रहा है।

GET http://localhost:8000/AM/controller/Users.js?_dc=1394340001581 404 (File not found)

यह सामान्य रूप से 'ऐप' फ़ोल्डर के बजाय आवेदन नाम (एएम) का उपयोग क्यों कर रहा है? मैंने 'ऐपफ़ोल्डर' कॉन्फ़िग को सीधे बिना फायदा का उपयोग करने की कोशिश की जब मैं आम तौर पर आवेदन का उपयोग करते हुए यह ठीक काम करता है

Ext.application({
    name: 'AM',

    // automatically create an instance of AM.view.Viewport
    autoCreateViewport: true,

    controllers: [
        'Users'
    ]
});

मैं रूट एप्लिकेशन निर्देशिका (जहां index.html और app.js रहते हैं) और extjs 4.2.1.883 का उपयोग कर एक साधारण HTTP सर्वर के साथ आवेदन की सेवा कर रहा हूं।


आपको ऐप फ़ोल्डर्स का सेट करना होगा :

Ext.application({
    name: 'AM',
    appFolder: "Physical path of appfolder",
    autoCreateViewport: true, 
    controllers: [
        'Users'
    ]
});

उपरोक्त वर्ग के लिए वस्तु बनाएं आपको नियंत्रकों के लिए सही पथ मिलेगा


मैंने कभी नहीं पाया कि यह मेरे लिए क्यों काम नहीं कर रहा था, लेकिन ट्यूटोरियल को जारी रखने के लिए, मैंने इसके बजाय Ext.application का इस्तेमाल किया और लॉन्च में एक वैश्विक वर्णालय को आवेदन दिया, अर्थात्:

Ext.application({
    requires: ['Ext.container.Viewport'],
    name: 'AM',
    controllers: [
        'Smiles'
    ],
    autoCreateViewport: false,

    launch: function() {
        window.Application = this;
    }
});

असल में मुझे लगता है कि fieldSubTpl और / या labelableRenderTpl करने labelableRenderTpl का उपयोग करना * ईवेंट श्रोता का उपयोग करने से एक क्लीनर दृष्टिकोण है। घटनाओं को रोका जा सकता है, श्रोताओं को अलग किया जा सकता है।

मुझे लगता है कि ओपी (लियोनेल चैन) की चिंता यह थी कि Ext.override का उपयोग करना हैकी है और वह 100% सही है। लेकिन अगर हम फॉर्म कॉन्फ़िगरेशन स्तर पर कस्टम टीपीएल पास करते हैं तो यह बुरा नहीं है:

Ext.create('Ext.form.Panel',{
    defaults:{
        fieldSubTpl:['<input id="{id}" type="{type}" ', 
        '<tpl if="name">name="{name}" </tpl>', 
        '<tpl if="size">size="{size}" </tpl>', 
        '<tpl if="tabIdx">tabIndex="{tabIdx}" </tpl>', 
        'class="{fieldCls} {typeCls}" autocomplete="off" />',
        '<span>',
        '<tpl if="allowBlank==false">*</tpl>',
        '</span>',
        {
            compiled: true, 
            disableFormats: true
    }]},
    items : [{
        xtype : 'textfield',.....

टीपीएल के साथ कुछ गलत हो सकता है, मैंने कोशिश नहीं की है।







javascript extjs model-view-controller extjs4