2012-02-15 32 views
17

Có thể tạo liên kết hình nền theo phong cách không?Làm cách nào để liên kết thuộc tính hình ảnh nền CSS?

Tôi đã thử mã này:

<div data-bind="foreach: itemList"> 
    <div data-bind="style: { background-image: 'url:(temp.png)' }">some text</div>   
</div> 

Tôi cũng đã cố gắng backgroundImage, mà không có dấu ngoặc kép trong url, mà không : sau url, nhưng nó vẫn không làm việc. Tất cả những người khác, như các liên kết color hoặc backgroundColor đang hoạt động hoàn hảo.

+0

Bạn có thực sự gắn kết với thuộc tính để cung cấp url hoạt động không? Từ ví dụ của bạn, bạn có một url mã hóa cứng mà tôi sẽ không sử dụng Knokout dữ liệu-ràng buộc bởi vì bạn có thể sử dụng sử dụng style = "background-image: ...". Tôi đang cố gắng liên kết với một thuộc tính để cung cấp url. Tôi đang xem xét chỉ cần bao gồm url: (temp.png) trong tài sản như là một hack. – Thomas

Trả lời

24

Như đã nêu trong documentation, bạn cần phải sử dụng tên Javascript cho kiểu bạn muốn kiểm soát.

Điều này có nghĩa là bạn sẽ phải sử dụng backgroundImage thay vì background-image.

Something như thế này:

<div data-bind="foreach: itemList"> 
    <div data-bind="style: { backgroundImage: 'url(temp.png)' }">some text</div> 
</div> 
+0

Lạ, tài liệu mâu thuẫn với hoạt động thực tế ... –

+0

tôi làm tài liệu màu đỏ và cũng có liên kết đến hầu hết các thuộc tính kiểu javascript: http://www.comptechdoc.org/independent/web/cgi/javamanual/ javastyle.html, nó nói sử dụng tên thẻ "thông thường" cho các thẻ không có tên javascript:/ –

+1

Tôi biết họ sử dụng dấu nháy đơn cho liên kết 'attr' và có lẽ cách này hoạt động theo cách tương tự ngay bây giờ và tài liệu chỉ xuất hiện không cập nhật. Trên thực tế, khi tôi nghĩ về nó, tôi nghĩ rằng tôi đã có vấn đề với điều này trước đây. –

6

Bạn không cần : trong phần url cho một hình ảnh nền, nó chỉ url(/foo.png) là.

bạn ràng buộc cũng cần phải sử dụng background-image vì đó là tài sản phong cách, nhưng trong dấu ngoặc kép, như vậy (backgroundImage là API JavaScript cho phong cách):

<div data-bind="style: { 'background-image': 'url(https://www.google.com/intl/en_com/images/srpr/logo3w.png)' }"></div>​ 

sống bản demo ở đây - http://jsfiddle.net/slace/EgUaM/

Chỉnh sửa Sau khi đăng ví dụ Github bắt đầu gặp phải sự cố về cơ sở dữ liệu, do đó, đây là một thay thế jsfiddle - http://jsfiddle.net/slace/EgUaM/1/

+0

Xin chào, fiddle đó không hiệu quả với tôi? Tôi đã cố gắng lời khuyên của bạn với dấu ngoặc kép, nhưng nó không làm việc cho tôi cả. Trong thực tế, tôi sao chép mã của bạn từ fiddle, để tải hình ảnh google, vẫn không có gì? –

+0

Kể từ khi đăng nó github đã đi offline (theo https://status.github.com/) vì vậy nó không tải knockout vào jsfiddle! –

+0

Nó trở lại trực tuyến, nhưng jsfiddle này không hoạt động. Nó chấp nhận backgroundColor: http://jsfiddle.net/EgUaM/2/ và tất cả các thẻ khác, ngoại trừ thẻ hình nền. @ John Papa Tôi biết tôi có thể sử dụng lớp ràng buộc, nhưng tôi cần phải sử dụng phong cách ràng buộc :) –

0

Chỉ cần đặt dấu ngoặc kép (dấu nháy đơn) xung quanh tên thuộc tính. bất cứ khi nào bạn có - trong tên thuộc tính, ví dụ: background-image hoặc background-url bạn cần phải đặt dấu ngoặc kép quanh tên

<div data-bind="style: {'background-image' : 'url(somepath)'}> 

Đó là vấn đề. Được đề cập trong tài liệu Knockout.

+0

Thiếu một dấu ngoặc kép ở cuối? btw, nó không hoạt động trên trường hợp của tôi. –

0

dựa trên tài liệu KO,

GIÁ TRỊ được đặt thành bất kỳ sản phẩm nào trong KO là giá trị thuộc tính ViewModal.

nơi somepath = Thuộc tính ViewModal là PATH cho hình nền của bạn.

9

Tôi không chắc chắn lý do tại sao tất cả mọi người (trừ Sujesh) được trả lời câu hỏi này và vẫn cứng mã hóa các temp.png. Nếu bạn không liên kết với thuộc tính ko.observable thì không sử dụng data-bind. Chỉ cần sử dụng thuộc tính kiểu chuẩn của phần tử html.

<div data-bind="foreach: itemList"> 
    <div style="background-image: url('temp.png');">some text</div>   
</div> 

Để gắn kết dữ liệu để nhận url tôi muốn câu trả lời của Sujesh Arukil có hiệu quả đối với tôi nhưng không. Nếu có ai làm việc đó, xin hãy khai sáng cho tôi.

Đây là những gì hiệu quả đối với tôi nhưng tôi không quan tâm. Tôi đã sử dụng tính toán để lấy giá trị của hình nền.

Trong mô hình xem

self.imageUrl = ko.observable(); 

self.bgImageUrlStyle = ko.computed(function() { 
    return "url(" + self.imageUrl() + ")"; 
}); 

Trong HTML

<div data-bind="style: { 'background-image': bgImageUrlStyle }"> 
</div> 
4

hoặc chỉ nối

<div data-bind="style: { backgroundImage: 'url(\'' + $data.videoImg + '\')' }"> </div> 
6

Bằng cách này, bạn có thể thiết lập một tùy chỉnh ràng buộc để thực hiện cú pháp ít khó sử dụng:

ko.bindingHandlers.backgroundImage = { 
    update: function(element, valueAccessor) { 
    ko.bindingHandlers.style.update(element, 
     function(){return {backgroundImage: "url('" + valueAccessor() + "')"}}); 
    } 
}; 

Sau đó, trong HTML của bạn, bạn có thể làm

<div data-bind="backgroundImage: image"></div> 
+1

Đây phải là câu trả lời được chấp nhận. Sạch sẽ, ngắn gọn và siêu dễ sử dụng và sử dụng lại. – Jed

0

Khi u nói: dữ liệu ràng buộc: "{... somecode ...}", bạn cần phải hiểu rằng u là bên trong javascript. Nếu bạn viết: background-image anh ta cố gắng trừ hình ảnh ra khỏi nền (background-image). Đó là các biến không xác định. Sau đó, nó là rõ ràng hơn nhiều.

0

<div data-bind="style: { background: 'url(' + imageUrl + ')' }" ></div>

Tôi đã sử dụng giả định ở trên để làm việc.

Nếu bạn sử dụng background: 'url(imageUrl)', nó sẽ chỉ coi là một chuỗi.

Các vấn đề liên quan