React Native - 未定义文档

时间:2017-02-09 04:25:12

标签: javascript react-native

我将移动应用程序从Cordova移植到React Native。 Cordova应用程序依赖于第三方JavaScript库Kandy.Io

此库使用全局ForecastService对象。当我将该库导入我的React Native项目时,我看到错误:

import Foundation

import Alamofire

class ForecastService {

    static let sharedInstance = ForecastService()

    private init() {}

    func downloadForecastDetails(forecast: Forecast, forecasts: [Forecast], completed: @escaping DownloadComplete) {
        let url = URL(string: FORECAST_URL)!

        Alamofire.request(url).responseJSON { response in
            let result = response.result.value

            if let dict = result as? Dictionary<String, AnyObject> {
                if let list = dict["list"] as? [Dictionary<String, AnyObject>] {

                    for obj in list {
                        let forecast = Forecast(weather: obj)
                        forecasts.append(forecast)
                    }
                }

            }

            completed()
        }

    }
}

我知道浏览器环境中没有DOM,但有没有办法在React Native项目中使用文档对象,以便我可以继续使用这个库?

1 个答案:

答案 0 :(得分:0)

在将Three.js与原生Webgl一起使用时,我的文档未定义。

简短摘要:Textureloader无法正常工作,因为它需要一个图像加载器,该图像加载器需要不正确的DOM。

大概有一个THREE.Texture函数,我这样使用:

extension NSString {
    func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat {
        let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)

        let boundingBox = boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSAttributedStringKey.font: font], context: nil)

        return ceil(boundingBox.height)
    }
}

如您所见,我使用了一个Image构造函数,它是从React Native导入的,像这样:

let texture = new THREE.Texture(
     url //URL = a base 64 JPEG string in this case     
     );

var img = new Image(128, 128);
img.src = url;
texture.normal = img;

react native documentation中,它将解释如何使用它,它支持base64编码的JPEG。

在您的情况下,您可以尝试类似的方法,因此您应该做的是查看哪个函数使用了该文档,并覆盖了该函数或通过响应本机提议来解决该问题