Firestore Web代码示例提供无效的参数类型

时间:2017-10-07 12:32:54

标签: javascript firebase gwt jsni google-cloud-firestore

我正在试用Firebase新的Firestore。当我从https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0运行代码示例时,我收到错误。

// Add a new document with a generated id.
db.collection("cities").add({
    name: "Tokyo",
    country: "Japan"
})
.then(function(docRef) {
    console.log("Document written with ID: ", docRef.id);
})
.catch(function(error) {
    console.error("Error adding document: ", error);
});
  

异常捕获:( FirebaseError):函数CollectionReference.add()要求其第一个参数为object类型,但它是:自定义Object对象

编辑: 对不起,我没有提到我正在使用GWT和JSNI,它没有gwt工作正常

5 个答案:

答案 0 :(得分:2)

快速解决方法

var city: any;
city = Object.assign({}, {
    name: "Tokyo",
    country: "Japan"
});
db.collection("cities").add(city)

答案 1 :(得分:2)

这可能是一个跨窗口问题:GWT代码在iframe中运行;如果Firebase正在寻找“裸对象”,它可能会比较对象的构造函数,如果对象穿过iframe边界,它将不是预期的构造函数。

也许尝试使用new $wnd.Object()代替{}new Object()

答案 2 :(得分:0)

<强> Add a document

然后你可以试试这个:

db.collection("cities").add({
    'name': "Tokyo",
    'country': "Japan"
})

答案 3 :(得分:0)

似乎GWT正在生成一些自定义对象,如错误所示,因此解决方法我使用非JSNI转换方法函数来创建这样的对象

    LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    // inflate the custom popup layout
    final View inflatedView = layoutInflater.inflate(R.layout.pop_up_test, null,false);
    // get device size
    Display display = getWindowManager().getDefaultDisplay();
    final Point size = new Point();
    display.getSize(size);
    //mDeviceHeight = size.y; //Not in use just comment it off for now

    // set height depends on the device size
    popupWindow = new PopupWindow(inflatedView, size.x - 50,(WindowManager.LayoutParams.WRAP_CONTENT), true );
    // set a background drawable with rounders corners
    // make it focusable to show the keyboard to enter in `EditText`
    popupWindow.setFocusable(true);
    popupWindow.setBackgroundDrawable(new ColorDrawable());//This has no meaning than dismissal of the Pop Up Noni!!
    // make it outside touchable to dismiss the popup window
    popupWindow.setOutsideTouchable(true);

    // show the popup at bottom of the screen and set some margin at bottom ie,
    popupWindow.showAtLocation(v, Gravity.BOTTOM, 0,100);

仍然只是一种解决方法,并且很想知道是否有更好的解决方案..

答案 4 :(得分:0)

我尝试了这段代码,如果您有来自角度 表单 Object 数据,则可以使用它:

this.afs.collection("/products").add(Object.assign(product));