我正在试用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工作正常
答案 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));