我将移动应用程序从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项目中使用文档对象,以便我可以继续使用这个库?
答案 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。
在您的情况下,您可以尝试类似的方法,因此您应该做的是查看哪个函数使用了该文档,并覆盖了该函数或通过响应本机提议来解决该问题