2014-12-09 1 views
-1

В отношении ExtJS 4.1.x Я был в состоянии использовать пользовательскую/библиотеку оболочки для манипулирования model, store, view, controller, а также других коммунальных услуг. Поэтому мне нужно заменить котельной табличкой кода через мою обычную/оберточную библиотеку. Что касается коды, как ниже: -Любые взломы для использования оболочки js lib вместо Extjs 5.x от Sencha CMD 5.x?

var Lib = Lib || { 
    $class  : 'Lib', 
    $package : 'Default', 
    version  : '1.0.00', 
    getName  : function(){ 
     return Lib.$class; 
    }, 
    define  : function(name, config){ 
     return Ext.define(name, config); 
    } 
}; 

моего заказа библиотека, прямо сейчас я хотел бы заменить следующий код

Ext.define('Myapp.view.main.MainModel', { 
    extend: 'Ext.app.ViewModel', 
    alias: 'viewmodel.main', 
    data: { 
     name: 'Myapp' 
    } 
}); 

как ниже в замене/обертки из ExtJS коды:

Lib.define('Myapp.view.main.MainModel', { 
    extend: 'Ext.app.ViewModel', 
    alias: 'viewmodel.main', 
    data: { 
     name: 'Myapp' 
    } 
}); 

Но вот проблема в том, что Sencha CMD 5.x создает ошибку, когда предыдущая версия Sencha SDK, поддержка CMD для использования сторонней библиотеки просто использовать его в index.html

<script id="extwrapper" type="text/javascript" src="Lib.js"></script 

но последняя Сенча CMD 5.x с ExtJS 5.x произошла ошибка компиляции. В любом случае я бы хотел использовать специальную/оболочную библиотеку вместо Extjs 5.x. У вас есть хаки? В то время как я пытался, добавив свою библиотеку клиента/обертку в app.json в

"js": [ 
    { 
     "path": "${ext.dir}/build/ext-all-rtl-debug.js" 
    }, 
    { 
     "path": "${ext.dir}/Lib.js", 
     "bootstrap": true 
    }, 
    { 
     "path": "app.js", 
     "bundle": true 
    } 
], 

еще его появляется Сенч CMD ошибка 5.x сборки. Никакая ссылка не поддерживает на className даже закрытие/встроенное функционирование скрипта java. например

Ext.define((function(){ return 'Myapp.view.main.MainModel';})(), { 
    extend: 'Ext.app.ViewModel', 
    alias: alias, 
    data: { 
     name: 'Myapp' 
    } 
}); 

на data это поддерживает простой Java-скрипт закрытия/инлайн функции, но нет ссылки. например

Ext.define('Myapp.view.main.MainModel', (function(){ 
    return { 
     extend: 'Ext.app.ViewModel', 
     alias: 'viewmodel.main', 
     data: { 
      name: 'Myapp' 
     } 
    } 
})()); 

даже если я собираюсь использовать простую ссылку, он не работает. например

Ext.define('Myapp.view.main.MainModel', (function(){ 
    var data = { 
     extend: 'Ext.app.ViewModel', 
     alias: 'viewmodel.main', 
     data: { 
      name: 'Myapp' 
     } 
    }; 
    return data; 
})()); 

Сложение Неудача для кода, как описано выше я упомянул

Sencha Cmd v5.0.2.270 
[INF] Processing Build Descriptor : default 
[INF] Loading app json manifest... 
[WRN] C1003: Unsupported Ext.define syntax (function does not return object lite 
ral) -- g:\js\extjs\myapp\app\view\main\MainModel.js:1 
[WRN] C1003: Unsupported Ext.define syntax (function does not return object lite 
ral) -- g:\js\extjs\myapp\app\view\main\MainModel.js:1 
[ERR] C2008: Requirement had no matching files (Myapp.view.main.MainModel) -- g:\j 
s\extjs\myapp\app\view\main\Main.js:12:50 
[ERR] 
[ERR] BUILD FAILED 
[ERR] com.sencha.exceptions.ExBuild: Failed to find any files for g:\js\extjs\my 
app\app\view\main\Main.js::ClassRequire::Myapp.view.main.MainModel 
[ERR] 
[ERR] Total time: 7 seconds 
[ERR] The following error occurred while executing this line: 
g:\js\extjs\myapp\.sencha\app\build-impl.xml:376: The following error occurred whi 
le executing this line: 
g:\js\extjs\myapp\.sencha\app\init-impl.xml:292: com.sencha.exceptions.ExBuild: Fa 
iled to find any files for g:\js\extjs\myapp\app\view\main\Main.js::ClassRequire:: 
Myapp.view.main.MainModel 

Где проблема? Не было ограничений с Extjs 4.1.3 с предыдущей версией Sencha SDK/CMD. но почему они добавили такой тип функции?

По ExtJS-4.1.3 я был в состоянии писать и компилировать как код, как показано ниже

Ext.define(Lib.view.getAbsView('V01I001001X01'), { 
    extend  : 'Ext.form.Panel', 
    alias  : Lib.app.getAlias('V01I001001X01'), 
    id   : 'V01I001001X01'.toLowerCase(), 
    bodyStyle : { 
     background : 'none' 
    }, 
    defaults : {   
     //TODO 
    }, 
    initComponent: function() { 
     var me  = this; 
     //TODO 
     me.callParent(arguments); 
    } 
}); 

Which одну работы, как вроде как жесткий кода, как ниже

Ext.define('Myapp.view.m01001.m0i001.v01i001001.V01I001001X01'), { 
    extend  : 'Ext.form.Panel', 
    alias  : 'widget.v01i001001x01' 
    id   : 'v01i001001x01', 
    bodyStyle : { 
     background : 'none' 
    }, 
    defaults : {   
     //TODO 
    }, 
    initComponent: function() { 
     var me  = this; 
     //TODO 
     me.callParent(arguments); 
    } 
}); 
+0

Какая ошибка сборки команды Sencha вы видите? Кстати, это ужасно, я понятия не имею, почему вы действительно хотите сделать это в реальном сценарии. –

+0

Я просто редактирую сообщение, чтобы прикрепить журнал ошибок для вашего наблюдения –

+0

Вы задумывались о том, чтобы отказаться от использования команды Sencha Command? Вы можете просто добавить свои сценарии на веб-страницу или упаковать их с помощью любого другого инструмента для мини-юнинга. – Krzysztof

ответ

0

Части вашей проблемы заключается в том, что Sencha Command не просто запускает JavaScript, он также анализирует и компилирует его, чтобы делать много «умных» вещей. Это означает, что есть некоторые ограничения на то, как должен формироваться ваш код.См:

http://www.sencha.com/forum/showthread.php?261509-Unsupported-Ext.define-syntax-%28function-does-not-return-object-literal%29

У вас есть этот код:

Ext.define('Myapp.view.main.MainModel', (function(){ 
    return { 
     extend: 'Ext.app.ViewModel', 
     alias: 'viewmodel.main', 
     data: { 
      name: 'Myapp' 
     } 
    } 
})()); 

Что это кажется ЦМД разбор и видит второй аргумент как нечто иное, чем литерал объект (который имеет смысл, так как это не так, это функция). Очевидно следующее будет работать:

Ext.define('Myapp.view.main.MainModel', { 
     extend: 'Ext.app.ViewModel', 
     alias: 'viewmodel.main', 
     data: { 
      name: 'Myapp' 
     } 
}); 

Я не понимаю, почему вы хотите использовать первую форму, по-видимому, не имеет никаких преимуществ по сравнению со стандартным методом делать это. В любом случае, похоже, вам лучше попытаться работать с Ext JS и CMD, а не взломать эту проблему.

+0

Потому что я хотел бы манипулировать 'className' и' data' как мой бизнес-спрос, а также уменьшать «котельную табличку кода». @colinramsay, что вы отмечаете в своем простом подходе, но моя цель находится в верхней части моего сообщения. –

+0

Ваш альтернативный подход не позволяет делать то, что Ext JS еще не предоставляет - по крайней мере, насколько я вижу. Если бы вы представили более подробный пример того, чего вы пытаетесь достичь, то это может быть более ясным. –

+0

Итак, я не сомневаюсь в моем коде и реализован с помощью Extjs 4.1.3, а также предыдущей версии компилятора. 'Extjs 5.x' заставляют нас подчиняться их функции, и это вызывает горький опыт. Мы свободны в написании кода, который мы ненавидим команде Sencha Extjs, чтобы ограничить нас такой свободой писать код. –