ios - Nativescript - 如何正确使用 ui/image-cache 中的占位符属性使其工作?

标签 ios nativescript

我正在尝试使用一组远程图像创建 ListView ,并在加载它们时显示占位符图像。

var imageSource = require("image-source");
var imageCache = require("ui/image-cache");
var cache = new imageCache.Cache();
var defaultImageSource = imageSource.fromResource("img-loading”);

cache.enableDownload();
cache.placeholder = defaultImageSource;
cache.maxRequests = 5;

也尝试使用 fromFile 而不是 fromResource。

有什么问题吗?

最佳答案

我不确定您如何使用 ImageCache,但您不能直接将 ImageCache 对象设置为 Image 的源。为了实现你想要的,你必须使用这样的东西(取自 http://pstaev.blogspot.com/2016/04/using-nativescripts-imagecache-to-cache.html ):

主页.xml

<Page xmlns="http://schemas.nativescript.org/tns.xsd" 
      navigatingTo="navigatingTo">
    <ListView items="{{ images }}">
      <ListView.itemTemplate>
        <GridLayout>
          <Image src="{{ imageSrc }}" stretch="aspectFill" height="100"/>
        </GridLayout>
      </ListView.itemTemplate>
    </ListView>
</Page>

主页.ts

import observableArray = require("data/observable-array");
import observable = require("data/observable");
import imageItem = require("./image-item");
import pages = require("ui/page");

export function navigatingTo(args: pages.NavigatedData)
{
    var page = <pages.Page>args.object;
    var model = new observable.Observable();
    var images = new observableArray.ObservableArray<imageItem.ImageItem>();

    images.push(new imageItem.ImageItem("http://foo.com/bar1.jpg"));
    images.push(new imageItem.ImageItem("http://foo.com/bar2.jpg"));
    // ...
    images.push(new imageItem.ImageItem("http://foo.com/bar100.jpg"));

    model.set("images", images);
    page.bindingContext = model;
}

图像项.ts

import observable = require("data/observable");
import imageCache = require("ui/image-cache");
import imageSource = require("image-source");

var cache = new imageCache.Cache();
cache.maxRequests = 10;
cache.placeholder = imageSource.fromResource("img-loading")

export class ImageItem extends observable.Observable
{
    private _imageSrc: string
    get imageSrc(): imageSource.ImageSource
    {
        var image = cache.get(this._imageSrc); 

        if (image)
        {
            return image;
        }

        cache.push(
            {
                key: this._imageSrc
                , url: this._imageSrc
                , completed:
                (image) =>
                {
                    this.notify(
                        {
                            object: this
                            , eventName: observable.Observable.propertyChangeEvent
                            , propertyName: "imageSrc"
                            , value: image
                        });
                }
            });

        return cache.placeholder;
    }

    constructor(imageSrc : string)
    {
        super();
        this._imageSrc = imageSrc;
    }
}

关于ios - Nativescript - 如何正确使用 ui/image-cache 中的占位符属性使其工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36072301/

相关文章:

css - 在按钮内垂直堆叠跨度

javascript - 从 Nativescript 的 WebView 访问 header /查询参数

iphone - 在单个设备上跨应用共享应用内购买

ios - 如何强制刷新重用的 collectionview 单元格?

css - Telerik UI 侧边抽屉 : how to remove gray bar from drawer-content

android - brew cask 安装 android-sdk

ios - 将 View Controller View 添加到 subview 时发现 nil

ios - 在 MonoTouch 中为 ToolbarItems.UIBarButtonItem 设置 BadgeValue

objective-c - 使用带有 Storyboard的 instantiateViewControllerWithIdentifier 传递属性值

ios - Nativescript + iOS webview + 本地文件