当配置了双向数据绑定时,我很难获得一些与Android微调器一起使用的功能.我想通过双向数据绑定设置微调器的初始值android:selectedItemPosition.微调器条目由ViewModel初始化并正确填充,因此数据绑定似乎正常工作.
问题在于双向绑定selectedItemPosition.ViewModel将变量初始化为5,但微调器的选定项保持为0(第一项).调试时,ObservableInt的值最初为5(如设置),但在executeBindings的第二阶段重置为零.
任何帮助,将不胜感激.
test_spinner_activity.xml
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable name="viewModel"
type="com.aapp.viewmodel.TestSpinnerViewModel"/>
</data>
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatSpinner
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/sTimeHourSpinner"
android:selectedItemPosition="@={viewModel.startHourIdx}"
android:entries="@{viewModel.startTimeHourSelections}"/>
</LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
TestSpinnerViewModel.java
public class TestSpinnerViewModel {
public final ObservableArrayList<String> startTimeHourSelections = new ObservableArrayList<>();
public final ObservableInt startHourIdx = new ObservableInt();
public TestSpinnerViewModel(Context context) {
this.mContext = context;
for (int i=0; i < 24; i++) {
int hour = i;
startTimeHourSelections.add(df.format(hour));
}
startHourIdx.set(5);
}
}
Run Code Online (Sandbox Code Playgroud)
TestSpinnerActivity.java
public class TestSpinnerActivity extends AppCompatActivity {
private TestSpinnerActivityBinding …Run Code Online (Sandbox Code Playgroud) AngularJS允许您实现双向数据绑定.然而,有趣的部分是它如何检测模型变化?该模型通常是一个普通的对象,如下面的代码.我们可以更改名称属性,$scope.user但AngularJS如何检测模型已更改?AngularJS是否枚举了$scope对象的所有属性?
angular.module('myApp', [])
.controller('BusinessCardController', function($scope){
$scope.user = {
name: 'Tanay Pant'
}
});
<input type="text" ng-model="user.name" placeholder="Full Name" />
Run Code Online (Sandbox Code Playgroud) 我似乎无法找到一个简单,具体的解释,说明如何使用数据绑定将WinForms应用程序中的控件绑定到嵌套对象.例如:
class MyObject : INotifyPropertyChanged
{
private string _Name;
public string Name
{
get { return _Name; }
set
{
_Name = value;
OnPropertyChanged("Name");
}
}
private MyInner _Inner;
public MyInner Inner
{
get { return _Inner; }
set
{
_Inner = value;
OnPropertyChanged("Inner");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
class MyInner : INotifyPropertyChanged
{
private string _SomeValue;
public string SomeValue
{
get { …Run Code Online (Sandbox Code Playgroud) 突然间我对android stoped工作的绑定,我现在建立的任何东西,我只是得到这个消息.
错误:任务':app:compileDevDebugJavaWithJavac'的执行失败.
java.lang.RuntimeException:发现数据绑定错误.****/数据绑定错误****消息:找不到android.widget.EditText上值类型为java.lang.String的属性'android:text'的getter.file:C:\ path\to\layout\layout.xml loc:85:12 - 96:54****\data binding error****
我试过了什么
首先,如果我的文件中存在错误,则建议绑定不会编译,因此删除了我使用绑定到一个文件的所有布局文件 layout.xml.我有
<EditText
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@{model.name}" />
Run Code Online (Sandbox Code Playgroud)
...并且它运行良好,但是如果我添加双向绑定android:text="@={model.name}"它会抛出上一个错误.
接下来,我补充说
@InverseBindingAdapter(attribute = "android:text")
public static String captureEditTextValue(EditText view) {
return view.getText().toString();
}
Run Code Online (Sandbox Code Playgroud)
...然后它会引发新的错误.
错误:任务':app:compileDevDebugJavaWithJavac'的执行失败.
java.lang.RuntimeException:发现数据绑定错误.****/数据绑定错误****消息:无法在视图类型'android.widget.EditText'文件中找到事件'android:textAttrChanged':C:\ Users\EdgeTech\AndroidStudioProjects\purse\purse-customer\app\src\main\res\layout\get_phone_layout.xml loc:85:12 - 96:54****\data binding error****
进一步,重构这一点
@InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged")
public static String captureEditTextValue(EditText view) {
return view.getText().toString();
}
Run Code Online (Sandbox Code Playgroud)
...仍然给出了以前的错误.
我的设置
在使用innerHTML时,在Polymer中创建数据绑定到属性的最简单方法是什么?
这是我的意思的一个例子 - http://jsfiddle.net/ry6og1q9/2/
<paper-input inputValue="{{foo}}" label="static foo"></paper-input>
Run Code Online (Sandbox Code Playgroud)
"staticFoo"paper-input是与{{foo}}绑定的数据 - 双向数据绑定.
var c = this.$.dynamicFooPlaceHolder;
c.innerHTML = '';
var e = document.createElement('div');
e.innerHTML = '<paper-input id="dynamicFoo" inputValue="{{foo}}" label="dynamic foo"></paper-input>';
c.appendChild(e);
Run Code Online (Sandbox Code Playgroud)
但是,使用innerHTML创建的"dynamicFoo"并没有以任何方式绑定到foo属性,尽管它的标记存在.
我试图用Node.bind() - http://www.polymer-project.org/docs/polymer/node_bind.html完成这个, 但它只绑定一种方式.
必须有一个平台实用程序来进行解析/绑定,但我无法在任何地方找到它.
我有一个简单的ng-repeat列表,其中我将当前列表项值分配给控制器上的另一个属性,如下所示:
<li ng-repeat="num in list">
<input type="text" ng-init="value = num" ng-model="value" />
<button type="button" class="btn btn-primary" ng-click="save()">Save</button>
</li>
Run Code Online (Sandbox Code Playgroud)
但是当我单击"保存"按钮时,我会获得为$ scope.value设置的默认值.我希望显示特定输入文本的值.
这是控制器:
angular.module('myApp', [])
.controller('MyController', function($scope){
$scope.value = false;
$scope.list = [0, 1, 2, 3, 4];
$scope.save = function() {
alert($scope.value);
}
});
Run Code Online (Sandbox Code Playgroud)
如何在保存函数调用中访问控制器中输入项的更新值.
这是相同的plunker:plnkr
更新:我希望将值提取到控制器而不将其作为参数传递.
javascript 2-way-object-databinding angularjs ng-repeat angular-ngmodel
我在现有代码中使用了数据绑定,现在我正在迁移到Room以进行持久化.我已经按照Florina博客中提到的步骤进行了访问
当我删除房间依赖时,我的代码构建正常,没有java代码错误或BR相关错误
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
Run Code Online (Sandbox Code Playgroud)
和它的运行,但给出运行时异常,说database_Impl不存在.因为它无法生成该文件.
但是在我把Annotation处理器放回去后,它给了我
Error:(29, 37) error: cannot find symbol class BR
Run Code Online (Sandbox Code Playgroud)
我使用的gradle插件是 com.android.tools.build:gradle:3.0.1
他们似乎都没有合作
迄今采取的步骤:
有没有人使用Room和Data绑定在一起?
android 2-way-object-databinding android-databinding annotation-processor android-room
假设我们有一个对象
class Entity
{
public string ID {get; set;}
public string Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我想将属性绑定到页面上的两个文本框,如下所示:
<asp:FormView ID="FormView" runat="server">
<ItemTemplate>
<asp:textbox ID="TextId" Text='<%# Bind("ID") %>'/>
<asp:textbox ID="TextId" Text='<%# Bind("Name") %>'/>
</ItemTemplate>
</asp:FormView>
Run Code Online (Sandbox Code Playgroud)
然后在代码后面写这个
public EntityObject
{
get { return ViewState["Entity"] as Entity; }
set { ViewState["Entity"] = value; }
}
protected override void OnInit(EventArgs e)
{
if (EntityObject== null)
EntityObject= new EntityObject();
FormView.DataSource = new[] { EntityObject };
FormView.DataBind();
base.OnInit(e);
}
Run Code Online (Sandbox Code Playgroud)
当我在文本框中输入值时,我希望EntityObject在PostBack之后重新加载页面时在属性中包含这些值,但属性始终为null.
我将采用角度JS来为一个特定的利基建立一个便士拍卖网站.我正在尝试计划倒数计时器,我一直在寻找试用firebase的理由.
我昨天想到让每次拍卖都以某种方式在实际数据库中进行倒计时,因为通过双向数据绑定,人们将始终保持更新.
当firebase更改时,所有连接的客户端立即更改.所以我的问题是......我怎样才能在特定记录中进行服务器端倒计时.
所以说我有一个项目x的记录,它有所有项目信息,其中一个数组键是"倒计时:59:01:00".什么是在SERVER端从59:01:00到00:00:00倒计时的现实和可扩展的方式.
我想也许是每1秒运行一次的cronjob?但随后数百个数据库条目每秒运行数百个倒计时,服务器可能会崩溃.
有什么好主意吗?
javascript node.js 2-way-object-databinding angularjs firebase
我正在尝试将上传脚本集成到我的页面中.我正在使用uploadcare.com.他们提供了一个简单的指令,但我无法让它工作:
https://github.com/uploadcare/angular-uploadcare/blob/master/angular-uploadcare.js
Run Code Online (Sandbox Code Playgroud)
我正在设置ng-model ="test",在我的控制器中我有以下内容:
angular.module('testApp')
.controller('MyCtrl', function ($scope) {
$scope.test = "test";
});
Run Code Online (Sandbox Code Playgroud)
HTML代码看起来像这样:
<uploadcare-widget ng-model="test" data-public-key="xyz" />
Run Code Online (Sandbox Code Playgroud)
当我检查Firebug时,我可以看到该小部件有效:
<input type="hidden" role="uploadcare-uploader" ng-model="test" data-public-key="6e0958899488d61fd5d0" data-crop="1200:630" value="http://www.ucarecdn.com/ca5513da-90f1-40d1-89e7-648237xxxxxx/-/crop/2560x1344/0,128/-/preview/" class="ng-isolate-scope ng-valid">
Run Code Online (Sandbox Code Playgroud)
但是这个输入值永远不会填充回我的"$ scope.test".这是为什么?当我输出$ scope.test时,它仍然显示"test"而不是我的图像路径值.
angularjs ×4
data-binding ×4
android ×3
.net ×2
c# ×2
javascript ×2
.net-4.0 ×1
android-room ×1
asp.net ×1
firebase ×1
java ×1
ng-repeat ×1
node.js ×1
polymer ×1
spinner ×1