2015-12-05 4 views
0

У меня есть ViewModel, который содержит некоторые начальные данные ... эти исходные данные основаны на глобальной переменной, которую я создал. В ViewModel у меня есть формула, которая делает некоторую логику на основе набора данных из глобальной переменной. Интересно, что эта формула не срабатывает при создании ViewModel. Я предполагаю, что это связано с тем, что свойство Something.Test не существует, поэтому внутренности ViewModel имеют некоторые умения, чтобы не запускать метод, если это свойство не существует.ExtJS 5: Исходная форма представления ViewModel не работает

Если этого не происходит, как я могу запустить формулу? Я знаю, что я мог бы найти Something, чтобы узнать, есть ли у него свойство Test, но мне любопытно, почему этот пример не сработает. Вот example:

Ext.application({ 
    name : 'Fiddle', 

    launch : function() { 
     // Define global var Something 
     Ext.define('Something', { 
      singleton: true 
     }); 
     Ext.define('MyViewModel', { 
      extend: 'Ext.app.ViewModel', 
      alias: 'viewmodel.myView', 
      data: { 
       Something: window.Something 
      }, 
      formulas: { 
       testSomething: function(getter) { 
        console.log('here', getter('Something.Test')); 
        return getter('Something.Test'); 
       }, 
       myTitle: function(getter) { 
        return 'My Title'; 
       } 
      } 
     }); 
     Ext.define('MyView', { 
      extend: 'Ext.panel.Panel', 
      bind: { 
       title: '{myTitle}' 
      }, 
      viewModel: { 
       type: 'myView' 
      } 
     }); 
     var view = Ext.create('MyView', { 
      renderTo: Ext.getBody() 
     }); 
     // This will fire the ViewModel formula 
     //view.getViewModel().set('Something', window.Something); 
     console.log(Something, window.Something) 
    } 
}); 
+0

Модель вид ленив - он не будет экземпляр, пока что-то пытается для доступа к нему. Попробуйте создать что-то, что связано с моделью просмотра в представлении. –

+0

Правильно ... хорошо, см. Мой обновленный код. Скажем, «Something.test» не определен, но «что-то» ... разве моя формула не срабатывает? Я предполагаю, что это не из-за того, что внутренние объекты ViewModel имеют некоторые умственные способности, чтобы сказать, что свойство не существует, поэтому оно не должно срабатывать. – incutonez

+0

Nope - лента продолжается. Теперь ViewModel создается, но формула не будет оцениваться, пока ее не попросят. –

ответ

1

Вы можете тренировки некоторую логику для обработки, когда Something.Test нет в наличии, что-то вроде:

data: { 
    Something: window.Something && window.Something.Test || {Test: null} 
}, 
formulas: { 
    testSomething: function(get) { 
     var val = get('Something.Test'); 
     console.log('Test'); 
     return val; 
    }, 
    myTitle: function(getter) { 
     return 'My Title'; 
    } 
} 
+0

[Этот пример] (https://fiddle.sencha.com/#fiddle/1250) не срабатывает. – incutonez

+0

Humm.. считая, что сработает. Во всяком случае, пример обновлен. –

+0

Я мог бы поклясться, что попробовал ... но да, это сработает. Я просто понял, что хотя «что-то» существует, но «Тест» технически неопределен, формула все равно срабатывает ... думаю, я был неправ. Спасибо, что поняли это. – incutonez

Смежные вопросы