Добавление статического изображения на экран просмотра Lightswitch HTML 2013

В моем случае у меня есть цветовая кодировка некоторых плиток в HTML-клиенте, и я хочу добавить простой ключ цветового кода. У меня есть файл PNG, который я хочу использовать.

Мне не требуется возможность загрузки или изменения изображения.

Эта ссылка, кажется, достигает того, что я ищу, но я не уверен, где это реализовать. Входит ли весь этот код в PostRender элемента управления изображением, который я создал?

Добавить изображение в выключатель света, используя локальное свойство и местоположение файла

Вот что представляет собой PostRender простого элемента данных изображения, которое я создал как локальное свойство изображения, а затем перетащил в конструктор решений. В основном он был скопирован из приведенной выше ссылки, но я изменил имя файла изображения, чтобы оно соответствовало моему, и я уже добавил элемент в структуру папок Content\Images, и он отображается в представлении файла:

myapp.BrowseOrderLines.ColorKey_postRender = function (element, contentItem) {
// Write code here.
function GetImageProperty(operation) {
    var image = new Image();
    var canvas = document.createElement("canvas");
    var ctx = canvas.getContext("2d");
    // XMLHttpRequest used to allow external cross-domain resources to be processed using the canvas.  
    // unlike crossOrigin = "Anonymous", XMLHttpRequest works in IE10 (important for LightSwitch) 
    // still requires the appropriate server-side ACAO header (see https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image)
    var xhr = new XMLHttpRequest();
    xhr.onload = function () {
        var url = URL.createObjectURL(this.response);
        image.onload = function () {
            URL.revokeObjectURL(url);
            canvas.width = image.width;
            canvas.height = image.height;
            ctx.drawImage(image, 0, 0);
            var dataURL = canvas.toDataURL("image/png");
            operation.complete(dataURL.substring(dataURL.indexOf(",") + 1));
        };
        image.src = url;
    };
    xhr.open('GET', this.imageSource, true);
    xhr.responseType = 'blob';
    xhr.send();
};

myapp.BrowseOrderLines.ColorKey_postRender = function (element, contentItem) {
    // Write code here.
    msls.promiseOperation
    (
        $.proxy(
            GetImageProperty,
            { imageSource: "content/images/Key.png" }
        )
    ).then(
        function (result) {
            contentItem.screen.ImageProperty = result;
        }
    );
};

}

В настоящее время элемент управления «Изображение» отображается на экране в браузере и имеет пользовательский размер, который я выбираю, но это просто голубая область, в которой не отображается мой файл изображения.

Я не уверен, что вставил изображение? Я не уверен, что это пропущенный шаг?

Спасибо!!


person CreedC    schedule 12.01.2016    source источник


Ответы (1)


Самый простой способ протестировать этот подход — изменить ваш postRender на следующий (который встраивает вспомогательную функцию в функцию postRender):

myapp.BrowseOrderLines.ColorKey_postRender = function (element, contentItem) {
    function GetImageProperty(imageSource) {
        return msls.promiseOperation(
            function (operation) {
                var image = new Image();
                var canvas = document.createElement("canvas");
                var ctx = canvas.getContext("2d");
                // XMLHttpRequest used to allow external cross-domain resources to be processed using the canvas.  
                // unlike crossOrigin = "Anonymous", XMLHttpRequest works in IE10 (important for LightSwitch) 
                // still requires the appropriate server-side ACAO header (see https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image)
                var xhr = new XMLHttpRequest();
                xhr.onload = function () {
                    var url = URL.createObjectURL(this.response);
                    image.onload = function () {
                        URL.revokeObjectURL(url);
                        canvas.width = image.width;
                        canvas.height = image.height;
                        ctx.drawImage(image, 0, 0);
                        var dataURL = canvas.toDataURL("image/png");
                        operation.complete(dataURL.substring(dataURL.indexOf(",") + 1));
                    };
                    image.onerror = function () {
                        operation.error("Image load error");
                    };
                    image.src = url;
                };
                xhr.open('GET', imageSource, true);
                xhr.responseType = 'blob';
                xhr.send();
            }
        );
    };
    GetImageProperty("content/images/Key.png").then(function onComplete(result) {
        contentItem.screen.ImageProperty = result;
    }, function onError(error) {
        msls.showMessageBox(error);
    });
};

Это предполагает, что вы назвали локальное свойство ImageProperty в соответствии с моим исходным сообщением, а элемент управления Image на вашем экране называется ColorKey.

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

Если это все еще не работает, вы можете протестировать процесс, изменив имя исходного файла изображения на content/images/user-splash-screen.png (этот png-файл должен был быть добавлен как само собой разумеющееся, когда вы создавали свой HTML-проект LightSwitch).

Поскольку функция GetImageProperty является вспомогательной процедурой, вместо того, чтобы встраивать ее в postRender, вы обычно размещаете ее во вспомогательном модуле JavaScript. Это позволит легко использовать ее повторно, не повторяя код функции. Если у вас еще нет такой библиотеки, и вы заинтересованы в ее реализации, в следующем посте рассматриваются некоторые детали, связанные с этим:

Lightswitch HTML глобальный файл JS для передачи переменной

person Chris Cook    schedule 12.01.2016
comment
Глядя на код, который вы разместили, кажется, что единственное, что я упустил, - это вызов локального свойства «ImageProperty». Вы очень опытны. Я ОЧЕНЬ благодарна вам за то, что вы мне помогли. У меня, вероятно, будут еще вопросы, и я буду придерживаться этого форума. Я всегда буду делать это честно, во-первых, чтобы не стать вредителем ;). Кроме того, я ищу, как принять ваш ответ и указать в качестве ответа... - person CreedC; 13.01.2016
comment
Я рад, что ответ был полезен, и, пожалуйста, не могли бы вы поставить галочку, чтобы принять его как ответ и проголосовать за него как за полезный. Я также только что обновил код в ответе, чтобы немного улучшить его. - person Chris Cook; 13.01.2016
comment
Что касается принятия ответа и голосования, если вы еще этого не сделали, стоит ознакомиться с туром stackoverflow, так как он проведет вас через процесс. - person Chris Cook; 13.01.2016