Как вызвать функцию, включенную в index.html в коллекции Backbone Marionette

Очень новый вопрос:

Я следую книге Дэвида Сулька Backbone.Marionette.js: A Serious Progression и пытаюсь изучить Backbone и Marionette. Я хочу использовать веб-API WordPress Gravity Forms в качестве сервера RestAPI, поскольку я не знаю ни одного языка на стороне сервера. Для аутентификации мне нужно включить этот файл JavaScript для создания rootUrl в модели и URL в коллекции: (http://www.gravityhelp.com/documentation/page/Web_API) Часть JavaScript.

Поэтому мне нужно включить 2 файла сценария в index.html (находится в корневой папке), прежде чем вот так:

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha1.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script>

Затем в коллекции (расположенной в js/entities/contact.js) мне нужно сделать следующее:

ContactManager.module("Entities", function(Entities, ContactManager, Backbone, Marionette, $, _){
Entities.ContactCollection = Backbone.Collection.extend({

    calculateSig: function(stringToSign, privateKey){
        var hash = CryptoJS.HmacSHA1(stringToSign, privateKey);
        var base64 = hash.toString(CryptoJS.enc.Base64);
        return encodeURIComponent(base64);
    },

    url: function(){
        var d = new Date,
         expiration = 3600 // 1 hour,
         unixtime = parseInt(d.getTime() / 1000),
         future_unixtime = unixtime + expiration,
         publicKey = "1234",
         privateKey = "abcd",
         method = "GET",
         route = "forms/1/entries";

        stringToSign = publicKey + ":" + method + ":" + route + ":" + future_unixtime;
        sig = this.calculateSig(stringToSign, privateKey);
        console.log(sig);

        return sig;
    },

    model: Entities.Contact

});
});

Первый глупый вопрос, который у меня возникает, заключается в том, как я могу вызвать функцию «CryptoJS.HmacSHA1» и «CryptoJS.enc.Base64» в рамках calculateSig, который находится в коллекции Backbone... Если я использую свое пространство имен ContactManager.CryptoJS.HmacSHA1, оно все равно говорит Невозможно прочитать свойство «HmacSHA1» неопределенного.

Не знаю, как реализовать скрипт авторизации Gravity Form для генерации URL-адреса для магистрали. Пожалуйста помоги!


person Hugh Hou    schedule 11.12.2014    source источник
comment
как я вижу, CryptoJS - это глобальная переменная, также ожидается, что она не определена в ContactManager.CryptoJS.HmacSHA1, поскольку вы не определили модуль CryptoJS в своем приложении. Также не совсем понятно, почему вы используете Коллекцию для этой формы? это будет список форм?   -  person Evgeniy    schedule 11.12.2014
comment
Если CrytoJS является глобальной переменной, как я включил в index.html, меня следует просто называть «var hash = CryptoJS.HmacSHA1 (stringToSign, privateKey);». и это должно работать. Но это не так (скажем, undefined). Вот почему я так смущен. Как я могу использовать другой JS-файл/функцию, включенную в структуру Marionette. Кстати, я перечислил записи результатов формы. Итак, это массив/набор записей. Мне нужно перезаписать backbone.sync, чтобы выполнить CRUD, для каждого действия http требуется специальный знак, прикрепленный к URL-адресу...   -  person Hugh Hou    schedule 12.12.2014
comment
Проблема с операционной системой решена... мой сайт находится под https, и я загружаю скрипт через http, который на самом деле не загружал скрипт CryptoJs...   -  person Hugh Hou    schedule 12.12.2014
comment
...Я не знаю ни одного серверного языка... - вы знаете JavaScript :-)   -  person joews    schedule 16.12.2014


Ответы (1)


Проблема в том, что мой сайт находится под SSL/HTTPS, и я получаю файл CryptoJS с http. Так что моя модель/коллекция никогда не получит глобальную переменную.

person Hugh Hou    schedule 13.12.2014