我试图在构造函数中使用映射插件,这样我就可以轻松地将其他函数添加到构造函数中,并从映射插件中自动创建可观察项。这是我目前拥有的代码,但它既不映射我提供的可观察变量,也不包括' save'函数在end viewmodel中。有更好的方法吗?
function ViewModel(model){
var self = this;
self = ko.mapping.fromJS(model);
self.save = function() {
var data = ko.toJSON(self);
$.post("/Licensing/edit", data, function(returnedData) {
// This callback is executed if the post was successful
});
}
};
var vm = new ViewModel(model);
ko.applyBindings(vm);
答案 0 :(得分:3)
您的代码无效,因为<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent“>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
orientation="vertical">
<include
android:id="@+id/toolbar_actionbar"
layout="@layout/toolbar_default"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/main_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
<!-- android:layout_marginTop="?android:attr/actionBarSize"-->
<fragment
android:id="@+id/fragment_drawer"
android:name="com.ulusol.knowmyshop.navigationdrawer.NavigationDrawerFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"/>
</android.support.v4.widget.DrawerLayout>
会返回您为ko.mapping.fromJS(model);
本地变量分配的新对象,而您使用self
函数扩展了该对象。
但是,这个新对象不会从构造函数返回,因此您将以空对象结束,因为最初传入的save
不会被修改。
您可以通过从构造函数返回this
来解决此问题:
self
或者您可以告诉映射插件不创建新对象只使用当前创建的对象并传递function ViewModel(model){
var self = this;
self = ko.mapping.fromJS(model);
self.save = function() {
var data = ko.toJSON(self);
$.post("/Licensing/edit", data, function(returnedData) {
// This callback is executed if the post was successful
});
}
return self;
};
作为第三个参数:
self
答案 1 :(得分:2)
没有理由使用构造函数(使用$$1+1$$
)。您不打算制作多个实例或拥有原型。只需使用为您创建的对象new
。
ko.mapping
答案 2 :(得分:0)
另外,save是一个私有方法,像这样写保存:
self._save = function(){ }