Menambahkan gambar statis ke Layar Jelajah Lightwitch HTML 2013

Dalam kasus saya, saya memiliki kode warna pada beberapa ubin di klien HTML dan saya ingin menambahkan kunci kode warna sederhana. Saya memiliki file PNG yang ingin saya gunakan.

Saya tidak memerlukan kemampuan untuk mengunggah atau mengubah gambar.

Tautan ini sepertinya mencapai apa yang saya cari, tetapi saya tidak yakin di mana harus menerapkannya. Apakah semua kode ini masuk ke PostRender dari Kontrol Gambar yang saya buat?

Tambahkan gambar ke lightwitch menggunakan properti lokal dan lokasi file

Berikut adalah PostRender dari item data Gambar sederhana yang saya buat sebagai Properti Lokal Gambar, lalu diseret ke Perancang Solusi. Itu pada dasarnya disalin dari tautan di atas, tetapi saya mengubah nama file gambar agar sesuai dengan milik saya, dan saya telah menambahkan item ke struktur folder Content\Images dan itu ditampilkan dalam tampilan file:

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;
        }
    );
};

}

Saat ini, kontrol Gambar ditampilkan di layar browser, dan merupakan ukuran khusus yang saya pilih, namun hanya area biru muda yang tidak menampilkan file gambar saya.

Saya tidak yakin apakah saya telah menyematkan gambar tersebut? Saya tidak yakin apakah itu langkah yang hilang?

Terima kasih!!


person CreedC    schedule 12.01.2016    source sumber


Jawaban (1)


Metode termudah untuk menguji pendekatan ini adalah dengan mengubah postRender Anda menjadi yang berikut (yang menyematkan fungsi pembantu dalam fungsi 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);
    });
};

Ini mengasumsikan bahwa Anda menamai properti lokal ImageProperty sesuai postingan asli saya dan kontrol Gambar di layar Anda diberi nama ColorKey.

Dalam contoh di atas, saya juga mengambil kesempatan untuk sedikit menyederhanakan dan meningkatkan kode dari postingan asli saya. Ini juga mencakup penangan kesalahan sederhana yang mungkin muncul jika ada masalah saat memuat gambar.

Jika ini masih tidak berhasil, Anda dapat menguji prosesnya dengan mengubah nama file sumber gambar menjadi content/images/user-splash-screen.png (file png ini seharusnya sudah ditambahkan saat Anda membuat proyek HTML LightSwitch).

Karena fungsi GetImageProperty adalah rutinitas pembantu, daripada menyematkannya di dalam postRender, Anda biasanya menempatkannya di dalam modul pembantu JavaScript. Ini akan memungkinkannya digunakan kembali dengan mudah tanpa mengulangi kode fungsinya. Jika Anda belum memiliki perpustakaan seperti itu dan Anda tertarik untuk menerapkannya, postingan berikut mencakup beberapa detail yang terlibat dalam melakukan hal ini:

Alihkan file JS global HTML untuk meneruskan variabel

person Chris Cook    schedule 12.01.2016
comment
Melihat kode yang Anda posting, tampaknya satu-satunya hal yang saya lewatkan adalah memanggil Properti Lokal 'ImageProperty'. Anda sangat terampil. Saya berterima kasih banyak kepada Anda karena telah membantu saya. Saya mungkin akan memiliki lebih banyak pertanyaan dan akan tetap mengikuti forum ini. Saya akan selalu mencobanya dengan jujur ​​terlebih dahulu, agar tidak menjadi hama ;). Juga, saya mencari cara menerima tanggapan dan penghargaan Anda sebagai jawabannya... - person CreedC; 13.01.2016
comment
Saya senang jawabannya bermanfaat dan bisakah Anda mengklik tanda centang untuk menerimanya sebagai jawaban dan memilihnya sebagai berguna. Saya juga baru saja memperbarui kode di jawaban untuk sedikit memperbaikinya. - person Chris Cook; 13.01.2016
comment
Mengenai penerimaan jawaban dan pemungutan suara, Jika Anda belum melakukannya, sebaiknya lihat tur stackoverflow karena ini akan memandu Anda melalui proses. - person Chris Cook; 13.01.2016