2016-02-03 2 views
0

Я создал небольшой прототип проекта с использованием CloudKit JS, и теперь я начинаю строить следующую версию, и я хочу использовать Ember, поскольку у меня есть некоторый базовый опыт. Однако я не уверен, где разместить код CloudKit JS. Например, где я должен добавить часть configure и функцию auth? Я думаю, что как только я найду место для кода auth, я мог бы добавить некоторые из моих функций запроса в отдельные виды и компоненты, верно?Ember.js с Cloudkit JS

Вот мой настроить код (с контейнером и идентификатор удаленного):

CloudKit.configure({ 
containers: [{ 

    containerIdentifier: '###', 

    // @todo Must generate a production token for app store version 
    apiToken: '###', 

    auth: { 
    persist: true 
    }, 

    // @todo Must switch to production for app store version 
    environment: 'development' 
}] 
}); 

Вот функция аутентификации:

function setupAuth() { 

    // Get the container. 
    var container = CloudKit.getDefaultContainer(); 

    //Function to call when user logs in 
    function gotoAuthenticatedState(userInfo) { 

    // Checks if user allows us to look up name 
    var userName = ''; 
    if (userInfo.isDiscoverable) { 
     userName = userInfo.firstName + ' ' + userInfo.lastName; 
    } else { 
     userName = 'User record name: ' + userInfo.userRecordName; 
    } 

    //Calls out initialization function 
    init(); 

    //Sets up UI for logged in users 
    setAuthenticatedUI(userName); 

    //Register logged out function 
    container 
     .whenUserSignsOut() 
     .then(gotoUnauthenticatedState); 
    } 

    //Function to call when user logs out 
    function gotoUnauthenticatedState(error) { 

    //Checks if error occurred 
    if (error && error.ckErrorCode === 'AUTH_PERSIST_ERROR') { 
     displayError(logOutError, 'Error code: AUTH_PERSIST_ERROR'); 
    } 

    // Sets up the UI for logged out users 
    setUnauthenticatedUI(); 

    //Register logged in function 
    container 
     .whenUserSignsIn() 
     .then(gotoAuthenticatedState) 
     .catch(gotoUnauthenticatedState); 
    } 

    // Check a user is signed in and render the appropriate button. 
    return container.setUpAuth() 
    .then(function(userInfo) { 

     // userInfo is the signed-in user or null. 
     if (userInfo) { 
     gotoAuthenticatedState(userInfo); 
     } else { 
     gotoUnauthenticatedState(); 
     } 
    }); 
} 

Init(), а затем вызывает функции для настройки запросов к добавляет диаграмму на страницу с использованием записей. Функции setAuthenticatedUI() и setUnauthenticatedUI() просто применяют и удаляют классы после аутентификации пользователя.

ответ

0

Ответ в значительной степени зависит от версии Ember, которую вы используете, и если вы планируете ее использовать. С маршрутами? Простые маршруты? RouteHandlers?

Например, если вы находитесь в Ember V2.3.0, вы могли бы рассмотреть возможность использования инъекции зависимостей (https://guides.emberjs.com/v2.3.0/applications/dependency-injection/), чтобы обеспечить настроенный экземпляр контейнера для остальной части вашего приложения, например:

export function initialize(application) { 
    var container = CloudKit.configure(config).getDefaultContainer(); 

    application.register('ckcontainer:main', container); 
    application.inject('route', 'ckcontainer', 'ckcontainer:main'); 
} 

export default { 
    name: 'ckcontainer', 
    initialize: initialize 
}; 

Тогда в маршрут, вы можете получить ссылку так:

export default Ember.Route.extend({ 
    activate() { 
    // The ckcontainer property is injected into all routes 
    var db = this.get('ckcontainer').privateCloudDatabase; 
    } 
}); 

-HTH

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